整个上午我一直在努力。希望一些正则表达的大师可以引导我朝着正确的方向前进。基本上,我正在使用正则表达式来比较两个字符串值。应该对两个字符串应用相同的正则表达式,如果所有命名组中的所有值都匹配,我们认为字符串等效(此命名组检查在代码中完成)。
对于字符串,我有类似“jw-cst”的东西需要与“cst”进行比较。我需要的正则表达式应该考虑这些等价物,因为之前的任何内容都不应该在命名组中捕获' - '。
因此...
jw-cst - >捕获组值=“cst” cst - > capture group value =“cst”
捕获组的名称无关紧要,我正在使用的应用程序只是循环遍历每个捕获的组,确保它们匹配两个结果。
到目前为止,我有这个:
(?。(小于。= - ) | *)
但似乎是在使用第二个匹配条件...所以总是返回“jw-cst”而不仅仅是“cst”。如果我删除第二个替代(。*),它将正确匹配...任何帮助将不胜感激。
答案 0 :(得分:1)
您可以使用此正则表达式:
^(?:\w+-)?(\w+)$
并将其应用于两个字符串。然后,捕获组1应包含相同的字符串。
这不会对字符串长度施加任何限制,它允许使用字母数字字符;例如,如果您只想允许2到3个ASCII字符,则可以使用
^(?:[A-Z]{2,3}-)?([A-Z]{2,3})$
如果您提供有关您正在使用的编程语言(以及哪个正则表达式引擎)的信息,我可能会为您提供更多提示。
在.NET中,您还可以使用:
(?<=^(?:\w+-)?)\w+$
这样,整场比赛只包含“第二”部分。