我有很多以
形式的字符串 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
答案 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")