与MatchObject.group()相关的re.sub()错误

时间:2015-10-08 10:27:35

标签: python regex

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

2 个答案:

答案 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")