簡體   English   中英

正則表達式用於匹配單詞的所有實例,但包含該單詞的特定超字符串除外

[英]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.

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