[英]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
參見演示。
我想要不包含(在第一個字符串中)的正則表達式,我只想匹配第二個字符串。
這意味着您應該檢查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.