![](/img/trans.png)
[英]Python - How to combine multiple re.sub functions into a single function?
[英]python re.sub single or multiple characters
我有很多形式的弦
100XX
123XX
1XX
234XXXXX
,我想将所有X
替换为0
。 字符串中还有地址形式的其他文本。
234XX N. Somestreet Anytown, USA
我不确定在后面的数字是否不会出现在其他任何地方,所以我不能只替换X
到目前为止,我已经有了这段代码,但它只删除了一个0
而我需要将其删除为可变数量的0。
re.sub(r"([0-9]+)([X]+)", r"\\g<1>0", "234XX")
这将给我2340
...我需要它返回23400
或如果给定123XXX
我需要它返回123000
您可以使用回调函数获得所需的结果,请参见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))
我要做的是使用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)
我最终要做的是创建一个可调用的并将其传递给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")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.