2017-08-03 131 views
-2

如何替換字符串中的一組字符,除非它們是單詞的一部分?例如,如果我有文本「你的人是我的」,我想用「你」替換「你的」。所以最後的文本將是「你是你最喜歡的人」。我不想讓香腸內的「尿」被改變,因爲它在一個詞的內部。有沒有一種通用的正則表達式在Python中做到這一點?我不想擔心如果「你」在之前或之後有空格等,只有它是另一個詞的一部分。謝謝!正則表達式替換字符,除非它們在單詞的內部?

我到目前爲止已經試過是一個簡單的

result = re.sub("ur", "youare", text) 

但這也取代了「UR」裏的「香腸」。如果我使用的字邊界在

result = re.sub(r"\bur\b", "youare", text) 

它將錯過字符串中最後一次出現的「烏爾」。

+1

文字邊界'r'\ bur \ b'' – anubhava

+0

你能證明*任何*努力解決這個問題嗎? –

+0

如果你發佈你已經試過的代碼,你會得到更好的答案 – Ananth

回答

0

如果不使用正則表達式...

你可以在每個空間string.split()分割字符串,然後在列表中理解,與'youre'更換的話'ur'。這可能看起來像這樣:

s = "ur the wurst person ur" 

result = " ".join(['youre' if w == 'ur' else w for w in s.split()]) 

希望這有助於!

0

result = re.sub(r'\bur\b', r'youare', "ur the wurst person ur")

從Python文檔:

\ b 匹配空字符串,但只在一個單詞的開頭或結尾。一個單詞被定義爲一系列的Unicode字母數字或下劃線字符,所以單詞的末尾用空格或非字母數字,非下劃線Unicode字符表示。請注意,在形式上,\ b被定義爲\ w和\ W字符之間的界限(反之亦然),或\ w和字符串的開始/結尾之間的界限。這意味着r'\ bfoo \ b'匹配'foo','foo。','(foo)','bar foo baz',但不匹配'foobar'或'foo3'。