2016-04-09 34 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