pythonre.sub公司单个或多个字符

2024-09-27 09:35:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有很多弦的形式

100XX123XX1XX234XXXXX我想用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


Tags: 字符串代码文本re地址地方数字形式
3条回答

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

import re

def repl(m):
    return (m.group(1) + m.group(2).replace('X','0'))

str = '234XX N. Somestreet Anytown, USA'
pattern = r'\b(\d+)(X+)\b'
print(re.sub(pattern, repl, str))

我最后做的是生成一个可调用的并将其传递给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")

我要做的是使用finditer返回regex的MatchObjects,然后可以访问start()和{}等函数来重建字符串。由于这是一个直接替换,所以您可以在不担心索引问题的情况下就地执行此操作。在

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)

相关问题 更多 >

    热门问题