2016-04-09 36 views
2

我需要使用正則表達式來實現替換,以在點之後添加空格,只要它不在兩位數之間。正則表達式和組的交集

a.a -> a. a 
7.7 -> 7.7 

要實現它,我有幾個規則,這裏就是其中之一:

text = (re.compile(u'(\D)(\.)(\D)')).sub('\\1\\2 \\3', text) 

我希望取代非數字符號之間點後添加空格,但是對於輸入

a.b.c.d.e 

結果是

a. b.c. d.e 

所以在一些符號之間沒有空格。看起來'a.b'首先被匹配,'b'之後不被處理爲'b.c.d'的一部分。有沒有可能解決這個問題?

謝謝!

+0

可以使用前瞻/向後斷言 –

+0

應該發生什麼'你好world.'?你的意思是指任何時間段或非特定數字字符之間的時間段? –

+0

雖然有一個問題。如果你只想排除'digit-dot-digit',那麼你的regex將不會匹配'digit-dot-notdigit'或'notdigit-dot-digit'。 – sln

回答

2

你的正則表達式不匹配重疊的字符串。您可以使用lookaround基地正則表達式,以使其重疊字符串匹配太:

>>> regex = re.compile(u'(?<=\D)(\.)(?=\D)') 
>>> 
>>> regex.sub(r'\1 ', "a.b.c.d.e") 
'a. b. c. d. e' 
+0

我不明白,OP字面上說這是預期結果'a。公元前。 d.e',不是這個'a。灣C。 d。 e' – Shafizadeh

+0

@Shafizadeh,即他們不想要的輸出,即他們目前正在獲得的輸出。 –

+0

@PadraicCunningham哦..我明白了。 Thx擡起頭來。 – Shafizadeh