Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正则表达式来匹配匹配字符串旁边不包含特定单词的字符串_C#_.net_Regex - Fatal编程技术网

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
表示单词边界)。

您的问题不清楚,匹配和不匹配的标准是什么。