2013-02-13 86 views
1

我想用逗号替换城市和数字之间的空格,但我想出的线条(以及它的变体)似乎抹去了字符串。用逗号替换字母和数字之间的空格?

>>> temp = re.sub(r"(\w+).*?(\d+)", ",", string) 

其中string是这样的:

Toronto 239495 
Cape Town 34567 

我怎样才能做到这一点?

我还在拿起正则表达式,所以任何代码的解释都会非常棒。

回答

5

您正在替换正确的匹配,但只能用逗号!比赛的其他部分也被替换。你可以使用断言,或者只是坚持他们回来:

temp = re.sub(r"(\w+).*?(\d+)", r"\1,\2", string) 

然而,\w+将只匹配在Cape TownCape。如何:

temp = re.sub(r"(.+?)\s*(\d+)", r"\1,\2", string) 
2

试试这个:

In [1]: string = "Toronto 239495 Cape Town 34567" 

In [2]: re.sub(r"(\w)\s+(\d)", r"\1,\2", string) 
Out [2]: 'Toronto,239495 Cape Town,34567' 

没有理由在这种情况下,符合整个城市的名称。这只匹配一个字母,后跟至少一个空格,后跟一个数字。然后用一个逗号替换空格。

2

你可以使用一个lookbehind and a lookahead

In [1]: s = 'Toronto 239495 Cape Town 34567' 

In [2]: re.sub(r"(?<=\w)\s(?=\d+)", ",", s) 
Out[2]: 'Toronto,239495 Cape Town,34567' 
相关问题