正则表达式用于匹配匹配字符串旁边不包含特定单词的字符串
本文关键字:字符串 单词 包含特 用于 正则表达式 | 更新日期: 2023-09-27 18:35:06
>我有如下文本
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
到目前为止,一切都是完美的,但现在我想要不包含 not(在第一个字符串中)的正则表达式,我只想匹配第二个字符串。
This's*is's*('s+'d+){1,}(?: ){0,}(?:['r'n]+|$)(?!not)
只需添加lookahead
.请参阅演示。
https://regex101.com/r/eB8xU8/8
我想要不包含 not(在第一个字符串中)的正则表达式,我只想匹配第二个字符串。
这意味着您应该检查This is...
模式后面是否没有换行符序列 + 空格* + not
作为一个禁用回溯的整个单词。我们可以在 .NET 中使用原子组禁用回溯:
(?>This's+is(?:'s+'d+)+ *)(?!['r'n]+'p{Zs}*not'b)
查看正则表达式演示
正则表达式This's+is(?:'s+'d+)+ *
的第 1 部分匹配This is
后跟一个或多个空格序列,后跟一个或多个数字,后跟零个或多个空格。(?>...)
防止模式的这一部分内部回溯。如果先前匹配的文本后跟空格,后跟整个单词not
(其中'b
代表单词边界),则前瞻(?!['r'n]+'p{Zs}*not'b)
匹配失败。