【问题标题】:TypeError: cannot concatenate 'str' and '_sre.SRE_Match' objectsTypeError:无法连接 'str' 和 '_sre.SRE_Match' 对象
【发布时间】:2015-09-01 22:02:21
【问题描述】:

我正在使用正则表达式检索一个字符串,并尝试将其与其他字符串连接。

错误:

TypeError: cannot concatenate 'str' and '_sre.SRE_Match' objects

例子:

original_string = "ABC 4x DEF"
regex = re.search(r"(\d)X|x", original_string)
new_string = "+" + regex + "00"
print "New string: %s" % new_string

如果一切正常,new_string 应该是 "+400"

【问题讨论】:

  • 您发布的代码未定义任何名为regex_fundleverage 的变量。您是否阅读过the documnetation 以了解什么是匹配对象、从何处获取它们以及如何使用它们?
  • 可以在这里查看更多内容stackoverflow.com/questions/18493677/…
  • @BrenBarn 抱歉,已编辑。它应该只是变量regex

标签: python regex concatenation


【解决方案1】:

regex 不是字符串。它是一个 Match Object 代表比赛。您必须提取匹配的文本:

fundleverage = "+" + regex.group(1) + "0"

请注意,您的表达式匹配大写的数字X 匹配小写的x(无数字)。在您的情况下,这意味着它与 x 匹配,并且第 1 组为空 (None)..

要匹配数字和xX,请使用:

regex = re.search(r"(\d)[Xx]", original_string)

或使用不区分大小写的匹配:

regex = re.search(r"(\d)x", original_string, flags=re.IGNORECASE)

演示:

>>> import re
>>> original_string = "ABC 4x DEF"
>>> regex = re.search(r"(\d)X|x", original_string)
>>> regex
<_sre.SRE_Match object at 0x10696ecd8>
>>> regex.group()
'x'
>>> regex.groups()
(None,)
>>> regex = re.search(r"(\d)x", original_string, flags=re.IGNORECASE)
>>> regex.group()
'4x'
>>> regex.groups()
('4',)
>>> regex.group(1)
'4'

【讨论】:

    【解决方案2】:

    对于不区分大小写的匹配,使用(?i)

    original_string = "ABC 4x DEF"
    regex = re.search(r"(\d)x(?i)", original_string)
    new_string = "+" + regex.group() + "00"
    print "New string: %s" % new_string
    

    新字符串:+4x00

    【讨论】:

      猜你喜欢
      • 2011-10-23
      • 2020-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多