命名捕获正则表达式有两个变种

时间:2011-02-02 17:04:33

标签: regex

整个上午我一直在努力。希望一些正则表达的大师可以引导我朝着正确的方向前进。基本上,我正在使用正则表达式来比较两个字符串值。应该对两个字符串应用相同的正则表达式,如果所有命名组中的所有值都匹配,我们认为字符串等效(此命名组检查在代码中完成)。

对于字符串,我有类似“jw-cst”的东西需要与“cst”进行比较。我需要的正则表达式应该考虑这些等价物,因为之前的任何内容都不应该在命名组中捕获' - '。

因此...

jw-cst - >捕获组值=“cst” cst - > capture group value =“cst”

捕获组的名称无关紧要,我正在使用的应用程序只是循环遍历每个捕获的组,确保它们匹配两个结果。

到目前为止,我有这个:

(?。(小于。= - ) | *)

但似乎是在使用第二个匹配条件...所以总是返回“jw-cst”而不仅仅是“cst”。如果我删除第二个替代(。*),它将正确匹配...任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式:

^(?:\w+-)?(\w+)$

并将其应用于两个字符串。然后,捕获组1应包含相同的字符串。

这不会对字符串长度施加任何限制,它允许使用字母数字字符;例如,如果您只想允许2到3个ASCII字符,则可以使用

^(?:[A-Z]{2,3}-)?([A-Z]{2,3})$

如果您提供有关您正在使用的编程语言(以及哪个正则表达式引擎)的信息,我可能会为您提供更多提示。

在.NET中,您还可以使用:

(?<=^(?:\w+-)?)\w+$

这样,整场比赛只包含“第二”部分。