簡體   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