具有负面Lookahead的正则表达式具有特殊分组

时间:2017-05-06 10:51:42

标签: regex vb.net lookahead negative-lookahead

我试图构建一个正则表达式模式,只有在之前不存在另一个模式时才匹配...

我需要匹配§+\s?(\d+) 重要的是,组(\d+)是结果集中的第一个组(这是我需要从输入中提取的内容,如果它是第一组,它会更容易)

匹配前不得出现的内容为\d+ [A-Z]{2} [A-Z]{3}

到目前为止我所拥有的是

^.*(?!\d+ [A-Z]{2} [A-Z]{3}).*§+\s?(\d+).*$

首先它不起作用,然后我想知道负Lookeahead是否作为一个组出现,如果它匹配,因为那时我需要另一个解决方案,如上所述。

有效示例

Whatever §§ 123 might contain after 1234 AB CDE
Whatever §1 the big brown fox

无效的示例

must not contain before 1234 AB CDE §§ 123

希望这不是什么大问题。

感谢您阅读!

1 个答案:

答案 0 :(得分:0)

在VB.NET中,在.NET正则表达式中,您可以使用无限宽度负面的lookbehind:

(?<!\d+\s+[A-Z]{2}\s+[A-Z]{3}\s.*)§+\s?(\d+)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

请参阅regex demo

(?<!\d+\s+[A-Z]{2}\s+[A-Z]{3}\s.*)构造如果有:

,则会导致比赛失败
  • \d+ - 1+位数
  • \s+ - 1+空格
  • [A-Z]{2} - 2个大写ASCII字母
  • \s+ - 1+空格
  • [A-Z]{3} - 3个大写ASCII字母
  • \s - 空白
  • .* - 除了换行符之外的任何0 +字符,尽可能多

......之前的

  • §+ - 1 + §个符号
  • \s? - 1或0(可选)空白
  • (\d+) - 第1组:一个或多个数字。