2014-02-22 192 views
1

我有以下字符串:"WordContainingYes. no yes,- no! yes. no" 我需要替換「是」的所有實例,但保留「WordContainingYes」。完整。 我使用"\b(yes.)\b",但在模式內有標點符號時不起作用。所以任何人都知道我應該如何匹配整個單詞+標點符號?正則表達式匹配整個單詞和標點符號

UPDATE

我所需要的單詞後,以匹配任何標點符號。不僅點。

感謝

+0

我不知道C#,但grep所使用'\ <' and '\>'相匹配的話。 – elyashiv

+2

正則表達式需要轉義'\ .' – Jones

+0

@elyashiv你能詳細說一下嗎? – Davita

回答

1

您可以使用此:

(?<=\s)(yes.) 

工作正則表達式的例子:

http://regex101.com/r/dO3rD9

這對空間使用「後視」,因此使用替換時,空間不會被替換。

按OP的評論上面:「它的工作原理,但它之前的單詞也會刪除空格(這樣做時更換)任何想法如何解決?」

+0

謝謝。我猜你以前忘了\,否則它能正常工作:)還有一件事,當沒有標點符號並且匹配整個單詞+標點符號時,是否有可能計算整個單詞(後者是您提供的解決方案)。我的意思是,要合併\ b(word)\ b和(?<= \ s)(yes \。)。謝謝:) – Davita

+0

寫點東西\ b(word)\ b OR(?<= \ s)(yes \。) – Davita

+0

@Davita,是的,如果我可以因爲特殊字符的問題,我總是遠離字界。相反,我通常使用:'(?<= \ s)。*?(?= \ s)'。無論標點符號還是特殊字符,它都會匹配整個單詞。 – MElliott

0

試試這個:

\byes\.\b 

UPDATE:

\s(yes.?)\s 

DEMO:http://regexr.com?38bnn


P.S..是正則表達式的特殊字符,意思是「匹配任何東西」。所以它必須逃脫(\.

+0

我需要匹配任何標點符號,而不只是點:) – Davita

+0

@Davita也許嘗試'\ byes。?\ b'或'\ syes。?\ s'呢? –

0

我認爲@瓊斯得到了點:。 (點)是一個特殊符號,需要轉義。請嘗試以下操作:

\byes\.\b 

如果你想natch任何標點符號,你應該使用類似的東西:

\byes[^\w]\b 

女巫將匹配是跟任何非空白字符。您可能需要更精確和實際寫出所有標點符號(我假設,因爲你用你不前。)

0

此正則表達式應該爲你工作(假設輸入字符串上沒有unicode):

(?<=\b)yes[^a-zA-Z0-9] 
0

您可以使用標點符號或單詞邊界。

- 對左側指定這樣的事情\byes\.\b
時要小心是\.非單詞,因此相匹配,對右側\b
需要有一個字\w或它不會匹配。

所以,不要那樣做。

這可能有效。

\b(yes(?:\p{Punct}|\b))

而且有輕微的修改,您可以排除某些標點符號這樣的。
這將捕獲所有非引號標點符號,這些標點符號將作爲替代品的一部分被刪除,或者只匹配一個字邊界。

\b(yes(?:[^\P{Punct}'"]|\b))

另一種方法是包括你想要的標點符號。

\b(yes(?:[.,+*?-]|\b))

相關問題