繁体   English   中英

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

[英]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参见演示。

https://regex101.com/r/eB8xU8/8

我想要不包含(在第一个字符串中)的正则表达式,我只想匹配第二个字符串。

这意味着您应该检查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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM