我一直在試圖做一個re.sub
來替換我的python字符串中的重複字符串,並且已經擊中牆壁。在Python中解析文本的問題
我試圖查找和替換字符串爲" *. in *."
所有這些是文字,即不重複的空間,然後什麼等等等等
我已經嘗試了很多東西,這裏是目前的一個在我的控制檯:
message = re.sub(r"([\s][*][.][\s]in[\s][*][.])+", " *. in *.",message)
有人能以我的方式指出我的錯誤嗎?
我一直在試圖做一個re.sub
來替換我的python字符串中的重複字符串,並且已經擊中牆壁。在Python中解析文本的問題
我試圖查找和替換字符串爲" *. in *."
所有這些是文字,即不重複的空間,然後什麼等等等等
我已經嘗試了很多東西,這裏是目前的一個在我的控制檯:
message = re.sub(r"([\s][*][.][\s]in[\s][*][.])+", " *. in *.",message)
有人能以我的方式指出我的錯誤嗎?
你的正則表達式是笨重的,但它的工作原理。問題是你與替換它完全一樣的字符串:
>>> import re
>>> message = 'string I am trying to find and replace is " *. in *." All those are literal'
>>> re.sub(r"([\s][*][.][\s]in[\s][*][.])+", " *. in *.", message)
'string I am trying to find and replace is " *. in *." All those are literal'
>>> re.sub(r"([\s][*][.][\s]in[\s][*][.])+", "wot", message)
'string I am trying to find and replace is "wot" All those are literal'
看到了嗎?有用!
你的正則表達式是「笨重」,因爲你想要的只有兩個神奇字符匹配字面上是*
和.
。儘管方括號的確可以消除它們的魔法屬性,但通常的做法是用反斜線來避開它們。所有其他字符和順序做不需要支架,所以你需要的是
re.sub(r"(\s\*\.\sin\s\*\.)+", "wot", message)
*我一直在嘗試做一個re.sub來替換一個**重複的**字符串* - OP試圖收縮幾個重複的子字符串只發生一次。看到我對這個問題的評論。 OP正則表達式和解決方案正常工作。或者應該工作。 –
@WiktorStribiżew:我剛剛測試過重複出現的*。在* .'中,這仍然有效。一串文字重複被一個單獨的「wot」替換,單個出現也是如此。那麼OP應該添加更多的例子。 – usr2564301
感謝您的努力。我複製並粘貼了上面的幾條建議,重複的字符串仍然沒有縮小。當我使用「wot」替換時,字符串變成「wot in wot」。爲了解決這個問題,我改變了戰術,首先取代了「*」。與另一個字符串,然後縮小基本上由Wiktor和Rad建議的代碼。 –
好了,你想*收縮*多「*。*中。」只有一個?請參閱http://ideone.com/wgEVsR。如果你啓用了're.U'標誌,'\ s'也會加速所有的Unicode空格。嘗試在[\ s] [*] [。])+「,」*。in *。「中輸入message = re.sub(r」([\ s] [*] [。] [\ s]), ,flags = re.U)' –
首先你應該逃避點:'[\。]' –
@Shionion:不,一個人不需要逃避角色類中的點。 –