我试图构建一个正则表达式模式,只有在之前不存在另一个模式时才匹配...
我需要匹配§+\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
希望这不是什么大问题。
感谢您阅读!
答案 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组:一个或多个数字。