2016-03-03 36 views
0

我正在研究要替換的單詞的正則表達式,如果它是獨立單詞而不是另一個單詞的一部分。例如單詞「事物」。如果是something,子字符串「thing」應該在那裏被忽略,但是如果一個單詞「thing」前面有一個特殊字符,如點或括號,我希望它被捕獲。另外,如果在它後面有一個括號,點或逗號(或其他任何非字母數字字符),我想要捕獲這個單詞。如果目標單詞不是另一個單詞的一部分,則使用正則表達式替換字詞

在串

東西是一個thing,並且被標記爲替代一個更啄和(thingthing

在上述我強調了3個字的判決。我使用以下正則表達式

\bthing\b 

我試了上面的語句在正則表達式101.com和使用這個正則表達式只有第一個字被突出顯示。我明白我的正則表達式不會捕獲(thing,但我認爲它會捕獲句子中的最後一個單詞,以便至少有兩次出現。

有人可以幫助我修改我的正則表達式來捕獲上述語句中的所有3次出現嗎?

+0

向我們展示你到目前爲止已經嘗試過的東西,這樣我們就可以看到你在做什麼或沒有在使用正則表達式。 – MethodMan

+1

@MethodMan'string.Replace'也會替換「Something」和「thingy」中的「thing」。 – juharr

+0

OP不想替換'thingy',只是確切的詞'thing'。正則表達式在這裏似乎不是一個糟糕的選擇。 – ps2goat

回答

0

如果您在C#代碼這一點,並使用「匹配」的方法,它應該匹配多次。

Regex regex = new Regex("\\bthing\\b"); 

foreach (Match match in regex.Matches(
    "Something is a thing, and one more thingy and (thing and more thing")) 
{ 
    Console.WriteLine(match.Value); 
} 
1

您可能正在使用JavaScript正則表達式,它會在找到第一個匹配項後返回。如果您在regex101.com的第二個框中添加修飾符g,它將查找所有匹配項。

這個站點是C#正則表達式測試更好:http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx

+0

我在哪裏添加'g'?在我的正則表達式? – ElenaDBA

+0

在regex101.com上,它是第二個框。在JavaScript正則表達式中,您可以使用'/ \ bthing \ b/g' – ps2goat

+0

C#將默認匹配全部。 – ps2goat

0

速記alphanum [0-9A-Za-z][^\W_]

使用回顧後和預讀,你會得到

(?<![^\W_])thing(?![^\W_])

擴展

(?<! [^\W_])  # Not alphanum behind 
thing    # 'thing' 
(?! [^\W_])  # Not alphanum ahedad 

匹配高亮文本

東西是一個thing,還有一啄和(thing多,爲什麼你就不能使用這種具有。載沿`string.Replace`功能,的IndexOf方法.. ALS ocan你thing

相關問題