我的文字如下
1. This is 678 897 999
not a text which I want
2. This is 678 897 879
我已将正则表达式应用为
This\s*is\s*(\s+\d+){1,}(?: ){0,}[\r\n]+
现在我想要的是匹配匹配字符串旁边没有 不 的字符串。我不希望正则表达式匹配第一个字符串。
修改
假设我有2个字符串,我应用了正则表达式,然后我找到了2个匹配
This is 678 897 999
This is 678 897 879
到目前为止这一切都很完美,但现在我想要的是不包含 的正则表达式(在第一个字符串中) ,我想只匹配第二个字符串。
答案 0 :(得分:3)
This\s*is\s*(\s+\d+){1,}(?: ){0,}(?:[\r\n]+|$)(?!not)
只需添加lookahead
。请参阅演示。
答案 1 :(得分:0)
我想要不包含not的正则表达式(在第一个字符串中),我想只匹配第二个字符串。
这意味着您应该检查This is...
模式是否后跟新行序列+空格* + not
作为整个单词并禁用回溯。我们可以在.NET中使用 atomic group 禁用回溯:
(?>This\s+is(?:\s+\d+)+ *)(?![\r\n]+\p{Zs}*not\b)
请参阅regex demo
正则表达式This\s+is(?:\s+\d+)+ *
的第1部分匹配This is
,后跟一个或多个空格的一个或多个序列,后跟一个或多个数字,然后是零个或多个空格。 (?>...)
阻止了模式中这一部分的回溯。如果先前匹配的文本后面跟着空白后跟整个单词(?![\r\n]+\p{Zs}*not\b)
(其中not
代表单词边界),前瞻\b
将无法匹配。