python re.sub单个或多个字符

时间:2016-11-10 00:52:07

标签: python regex

我有很多以

形式的字符串

100XX 123XX 1XX 234XXXXX我希望将所有X替换为0。字符串中还有其他文本以地址的形式出现。

234XX N. Somestreet Anytown, USA我无法确定X后跟的数字是否出现在其他地方,所以我不能只替换X的

到目前为止我有这个代码,但它只放在一个0中,我需要它放入一个可变数量的0 ..

re.sub(r"([0-9]+)([X]+)", r"\g<1>0", "234XX")

这会给我2340 ...我需要它来返回23400或者如果给定123XXX我需要它返回123000

3 个答案:

答案 0 :(得分:2)

您可以使用回调函数获得所需的结果,请参阅http://ideone.com/ccB37k

false

答案 1 :(得分:1)

我要做的是使用finditer返回正则表达式的MatchObjects,然后您可以访问start()end()等函数来重建字符串。由于这是直接替换,您可以在不担心索引问题的情况下执行此操作。

import re

res = '234XX N. Somestreet Anytown, USA\n234XXXXXX N. Somestreet Anytown, USA\nXXXXXXXXXX'

for match in re.finditer(r"([0-9]+)([X]+)", res):
    print(match.group(1))
    print(len(match.group(2)))
    # res = res[:match.end(1)] + ('0' * len(match.group(2))) + res[match.end():]
    res = res[:match.end(1)] + match.group(2).replace('X','0') + res[match.end():]

print(res)

答案 2 :(得分:0)

我最终做的是调用并将其传递给re.sub

def sub_0_for_x(match):
    old = match.groups()
    return old[0] + "0" * len(match[1])

re.sub("([0-9]+)([0]+)", sub_0_for_x, "123XX Anyplace, USA")