用逗号替换字母和数字之间的空格?

时间:2013-02-13 00:22:40

标签: python regex

我希望能够用逗号替换城市和数字之间的空格,但我提出的那条线(及其变体)似乎抹掉了字符串。

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

string就像:

Toronto 239495
Cape Town 34567

我该怎么做?

我仍在使用正则表达式,所以对任何代码的任何解释都会非常棒。

3 个答案:

答案 0 :(得分:5)

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

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

但是,\w+只会与Cape中的Cape Town匹配。怎么样:

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

答案 1 :(得分:3)

您可以使用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'

答案 2 :(得分: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'

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