正则表达式以跳过捕获组中的字符

Tam*_*ege 38 regex

是否可以在正则表达式中跳过捕获组中的几个字符?我正在使用.NET正则表达式,但这无关紧要.

基本上,我要找的是:

[随机文字] AB-123 [随机文字]

我需要捕捉'AB123',没有连字符.

我知道AB是2或3个大写字符,123是2或3位数,但这不是困难的部分.困难的部分(至少对我来说)是跳过连字符.

我想我可以单独捕获它们然后在代码中连接它们,但我希望我有一个更优雅的,仅正则表达式的解决方案.

有什么建议?

Tom*_*lak 47

简而言之:你做不到.匹配总是连续的,即使它包含零宽度断言的东西,如果你想要到达后一个字符,也无法匹配下一个字符.

  • 真正.但是环顾不会*匹配任何东西.位置正则表达式引擎在sting中的位置不会改变. (3认同)

Jef*_*man 19

实际上没有办法创建表达式,使匹配的文本与源文本中找到的文本不同.您需要在单独的步骤中删除连字符,方法是分别匹配第一个和第二个部分并连接两个组:

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 );
Run Code Online (Sandbox Code Playgroud)

或者通过在与匹配过程分开的步骤中删除连字符:

match = Regex.Match( text, "[A-B]{2,3}-[0-9]{2,3}" );
matchedText = match.Value.Replace( "-", "" );
Run Code Online (Sandbox Code Playgroud)

  • 还有`match.Result("$ 1 $ 2")` (3认同)