re.sub()
的工作非常简单,但我无法正常工作。
import re
print re.sub(r"\d+", lambda x:x, "1 2 3 4 5")
匹配的字符串应按原样打印,因此预期输出为:
1 2 3 4 5
我得到的错误是:
Traceback (most recent call last):
File "_.py", line 2, in <module>
print re.sub(r"\d+", lambda x:x, "1 2 3 4 5")
File "/home/radar/anaconda/lib/python2.7/re.py", line 155, in sub
return _compile(pattern, flags).sub(repl, string, count)
TypeError: sequence item 0: expected string, _sre.SRE_Match found
答案 0 :(得分:3)
替换函数由re.sub()
传递match object。您直接返回该匹配对象,而您必须返回一个字符串;毕竟那将是用来替换( sub stitute)原始匹配的东西。
您可以通过MatchObject.group()
method:
print re.sub(r"\d+", lambda x: x.group(), "1 2 3 4 5")
但是,您没有明确表示您预计会发生这种情况;以上将返回原始字符串,因为它将自己替换为每个数字:
>>> re.sub(r"\d+", lambda x: x.group(), "1 2 3 4 5")
'1 2 3 4 5'
或者你可以将数字增加一个(这需要转换为整数,然后在操作之后,转换回字符串):
>>> re.sub(r"\d+", lambda x: str(int(x.group()) + 1), "1 2 3 4 5")
'2 3 4 5 6'
答案 1 :(得分:1)
re.sub(r"\d+", lambda x: x.group(), "1 2 3 4 5")