[英]Regex to match a string which does not contain a specific word next to the match string
我有以下文字
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个以上的字符串,并应用了regex,然后发现2个匹配项
This is 678 897 999
This is 678 897 879
到此为止一切都很完美,但是现在我想要不包含(不在第一个字符串中)的正则表达式,我只想匹配第二个字符串。
This\s*is\s*(\s+\d+){1,}(?: ){0,}(?:[\r\n]+|$)(?!not)
只需添加lookahead
参见演示。
我想要不包含(在第一个字符串中)的正则表达式,我只想匹配第二个字符串。
这意味着您应该检查This is...
模式后是否没有换行符+空格* + not
作为整个单词禁用回溯 。 我们可以使用.NET中的原子组禁用回溯:
(?>This\s+is(?:\s+\d+)+ *)(?![\r\n]+\p{Zs}*not\b)
正则表达式的第1部分This\\s+is(?:\\s+\\d+)+ *
匹配This is
之后是一个或多个序列的一个或多个空格,后跟一个或多个数字,然后是零个或多个空格。 (?>...)
防止在模式的此部分内回溯。 先行(?![\\r\\n]+\\p{Zs}*not\\b)
失败,如果用空格紧随其后,整个字先前匹配的文本之后的比赛not
(其中\\b
代表一个单词边界)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.