我有以下字符串:"WordContainingYes. no yes,- no! yes. no"
我需要替換「是」的所有實例,但保留「WordContainingYes」。完整。 我使用"\b(yes.)\b"
,但在模式內有標點符號時不起作用。所以任何人都知道我應該如何匹配整個單詞+標點符號?正則表達式匹配整個單詞和標點符號
UPDATE
我所需要的單詞後,以匹配任何標點符號。不僅點。
感謝
我有以下字符串:"WordContainingYes. no yes,- no! yes. no"
我需要替換「是」的所有實例,但保留「WordContainingYes」。完整。 我使用"\b(yes.)\b"
,但在模式內有標點符號時不起作用。所以任何人都知道我應該如何匹配整個單詞+標點符號?正則表達式匹配整個單詞和標點符號
UPDATE
我所需要的單詞後,以匹配任何標點符號。不僅點。
感謝
您可以使用此:
(?<=\s)(yes.)
工作正則表達式的例子:
這對空間使用「後視」,因此使用替換時,空間不會被替換。
按OP的評論上面:「它的工作原理,但它之前的單詞也會刪除空格(這樣做時更換)任何想法如何解決?」
試試這個:
\byes\.\b
UPDATE:
\s(yes.?)\s
P.S..
是正則表達式的特殊字符,意思是「匹配任何東西」。所以它必須逃脫(\.
)
我需要匹配任何標點符號,而不只是點:) – Davita
@Davita也許嘗試'\ byes。?\ b'或'\ syes。?\ s'呢? –
我認爲@瓊斯得到了點:。 (點)是一個特殊符號,需要轉義。請嘗試以下操作:
\byes\.\b
如果你想natch任何標點符號,你應該使用類似的東西:
\byes[^\w]\b
女巫將匹配是跟任何非空白字符。您可能需要更精確和實際寫出所有標點符號(我假設,因爲你用你不前。)
此正則表達式應該爲你工作(假設輸入字符串上沒有unicode
):
(?<=\b)yes[^a-zA-Z0-9]
您可以使用標點符號或單詞邊界。
注 - 對左側指定這樣的事情\byes\.\b
時要小心是\.
非單詞,因此相匹配,對右側\b
需要有一個字\w
或它不會匹配。
所以,不要那樣做。
這可能有效。
\b(yes(?:\p{Punct}|\b))
而且有輕微的修改,您可以排除某些標點符號這樣的。
這將捕獲所有非引號標點符號,這些標點符號將作爲替代品的一部分被刪除,或者只匹配一個字邊界。
\b(yes(?:[^\P{Punct}'"]|\b))
另一種方法是包括你想要的標點符號。
\b(yes(?:[.,+*?-]|\b))
我不知道C#,但grep所使用'\ <' and '\>'相匹配的話。 – elyashiv
正則表達式需要轉義'\ .' – Jones
@elyashiv你能詳細說一下嗎? – Davita