正则表达式用于匹配匹配字符串旁边不包含特定单词的字符串

本文关键字:字符串 单词 包含特 用于 正则表达式 | 更新日期: 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)匹配失败。