我希望能够用逗号替换城市和数字之间的空格,但是我想出的行(及其变体)似乎消除了字符串。
>>> temp = re.sub(r"(\w+).*?(\d+)", ",", string)
string
就像:
Toronto 239495
Cape Town 34567
我怎样才能做到这一点?
我仍在使用正则表达式,所以任何代码的任何解释都会非常棒。
您正在替换正确的匹配项,但只能使用逗号!比赛的其他部分也被替换。您可以使用断言,或者只是将它们重新插入:
temp = re.sub(r"(\w+).*?(\d+)", r"\1,\2", string)
但是,\w+
只会匹配Cape
in Cape Town
。怎么样:
temp = re.sub(r"(.+?)\s*(\d+)", r"\1,\2", string)
您可以使用lookbehind 和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'
试试这个:
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'
在这种情况下,没有理由匹配城市的全名。这仅匹配一个字母,后跟至少一个空格,后跟一个数字。然后它用一个逗号替换空格。