簡體   English   中英

正則表達式匹配某些字符串,並忽略它是否以某種模式開頭

[英]Regex match certain string and ignore if it starts with some pattern

我在C#代碼中使用以下正則表達式嘗試匹配,在文件中save some后跟一些單詞,並delete some后跟一些單詞。

\\bsave\\ssome\\b\\s[^\\s]+|\\bdelete\\ssome\\b\\s[^\\s]+

這按預期工作。 現在,我想從匹配中排除那些具有類似- save some - delete some的模式的那些。

我嘗試使用以下內容,但沒有用。 在下面的表達式中,我只是使用了表達式來忽略- save some感謝任何幫助。 (?!-\\s\\bsave\\ssome\\b\\s[^\\s])(\\bsave\\ssome\\b\\s[^\\s]+|\\bdelete\\ssome\\b\\s[^\\s]+)

演示在這里

您需要使用負向后看並將模式分組:

(?<!-\p{Zs}*)(?:\bsave\ssome\b\s[^\s]+|\bdelete\ssome\b\s[^\s]+)
^^^^^^^^^^^^  ^                                                ^  

正則表達式演示

如果后面的(?<!-\\p{Zs}*)查找save/delete失敗,則匹配失敗-后面有零個或多個空格(如果必須至少有一個,則使用+ )。 我使用\\p{Zs}僅匹配水平空白。 如果要匹配換行符,請使用\\s

合同規定的正則表達式版本:

(?<!-\s*)\b(save|delete)\ssome\b\s\S+

使用Explicit Capture標志用 由於\\ssome\\b\\s\\S+在這兩種選擇中都是通用的,因此您可以將組的末尾移動到只包含savedelete

C#:

var rx = @"(?<!-\s*)\b(save|delete)\ssome\b\s\S+";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM