[英]Regex for matching all instances of a word except a specific superstring containing that word
我正在研究一個正則表達式,它將匹配一個單詞的所有實例,但包含該單詞的特定字符串除外。
例如,我想匹配以下句子中所有stack
實例,除了stack.overflow
( 因為它后面是.overflow
), 然后用STACK
替換stack
這是堆棧溢出時的頁面堆棧。 有時也稱為stack.overflow.com
執行替換操作后,以上句子應類似於:
這是STACK溢出頁面的STACK。 有時也稱為stack.overflow.com
編輯:
為了澄清一些混亂,我想匹配包含所有字符串stack
全部使用小寫,除了特定的情況下stack
其次.overflow
。 例如下面的句子
我堆疊了這個堆疊堆棧並重新堆疊(再次對其進行堆疊),但是沒有stack.overflow但只有stack.overflow和restacked.overflow
應該
我堆疊了這個堆疊的堆疊並重新堆疊(再次對其進行堆疊),但是沒有stack.overflow,而是STACKed.overflow和reSTACKed.overflow
使用負數前瞻。
\bstack(?!\.overflow)
要使其不區分大小寫,請使用RegexOptions.IgnoreCase
標志。
帶Regex.Replace
C#示例代碼,其中的標志被替換為內聯(?i)
選項:
var res = Regex.Replace(input, @"(?i)\bstack(?!\.overflow)", "STACK");
證明:
System.Text.RegularExpressions.Regex.Replace("This is a stack of pages on stack overflow. Sometimes also referred to as stack.overflow.com"
,"stack(?!\.overflow)"
,"STACK")
這對我有用。 (不包括匹配項,后跟“ .overflow”。)
非常簡單:使用環顧四周! 它們與單詞的開頭和結尾匹配。
(?<=\s|^)stack(?=\s|\.$)
我無法為您演示整個過程,因為Java語言不支持向后搜索,但請參見此處 。 然后,您可以獲得您的匹配項,並將其替換為toUpper
。
說明
(?<=\\s|^)
在單詞前尋找空格或字符串的開頭。
(?=\\s|\\.$)
在單詞之后查找空格或點以及字符串的結尾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.