是否可以在正则表达式中跳过捕获组中的几个字符?我正在使用.NET正则表达式,但这无关紧要.
基本上,我要找的是:
[随机文字] AB-123 [随机文字]
我需要捕捉'AB123',没有连字符.
我知道AB是2或3个大写字符,123是2或3位数,但这不是困难的部分.困难的部分(至少对我来说)是跳过连字符.
我想我可以单独捕获它们然后在代码中连接它们,但我希望我有一个更优雅的,仅正则表达式的解决方案.
有什么建议?
简而言之:你做不到.匹配总是连续的,即使它包含零宽度断言的东西,如果你想要到达后一个字符,也无法匹配下一个字符.
实际上没有办法创建表达式,使匹配的文本与源文本中找到的文本不同.您需要在单独的步骤中删除连字符,方法是分别匹配第一个和第二个部分并连接两个组:
match = Regex.Match( text, "([A-B]{2,3})-([0-9]{2,3})" ); matchedText = string.Format( "{0}{1}", match.Groups.Item(1).Value, match.Groups.Item(2).Value );
或者通过在与匹配过程分开的步骤中删除连字符:
match = Regex.Match( text, "[A-B]{2,3}-[0-9]{2,3}" ); matchedText = match.Value.Replace( "-", "" );