C# 正则表达式来匹配匹配字符串旁边不包含特定单词的字符串
我有如下文本C# 正则表达式来匹配匹配字符串旁边不包含特定单词的字符串,c#,.net,regex,C#,.net,Regex,我有如下文本 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]+ 现在我想要的是匹配一个字符串,它在匹配字符串旁边没有not。我不希望正则表达式与第一个字符串匹配
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]+
现在我想要的是匹配一个字符串,它在匹配字符串旁边没有not。我不希望正则表达式与第一个字符串匹配
编辑
假设我有2个字符串,如上所述,我应用了正则表达式,然后我找到了2个匹配项
This is 678 897 999
This is 678 897 879
到目前为止,这一切都是完美的,但现在我希望正则表达式不包含not(在第一个字符串中),我只想匹配第二个字符串
This\s*is\s*(\s+\d+){1,}(?: ){0,}(?:[\r\n]+|$)(?!not)
只需添加lookahead
。请参阅演示
我想要不包含not的正则表达式(在第一个字符串中),我只想匹配第二个字符串
This\s*is\s*(\s+\d+){1,}(?: ){0,}(?:[\r\n]+|$)(?!not)
这意味着您应该检查This is…
模式后面是否有换行符+空格*+not
作为一个禁用回溯的单词。我们可以在.NET中使用原子组禁用回溯:
见
正则表达式的第1部分
此\s+是(?:\s+\d++*
匹配此是
后跟一个或多个空格的一个或多个序列,后跟一个或多个数字,然后后跟零个或多个空格。(?>…)
防止在模式的这一部分中回溯。如果先前匹配的文本后面有空格,后跟一个完整的单词not
(?![\r\n]+\p{Zs}*not\b),则前瞻匹配失败(其中\b
表示单词边界)。您的问题不清楚,匹配和不匹配的标准是什么。