_sre.SRE_Pattern 对象在与另一个连接时不可调用

Posted

技术标签:

【中文标题】_sre.SRE_Pattern 对象在与另一个连接时不可调用【英文标题】:_sre.SRE_Pattern object is not callable if concatenate with another 【发布时间】:2013-10-04 02:33:36 【问题描述】:

我是 python 新手,我在编写正则表达式和 csv 时遇到问题。

这里是代码

import re
import csv

match_text = re.compile(r'[^(<a href="/employer/\d+?\>)].+[^(\s</a>)]', re.UNICODE)
match_hh_company_url = re.compile(r'/employer/\d+', re.UNICODE)

def listing_employers():
    ...
    ## making a list with some data
    ...
    source_list = match_page.findall(data)
    source_list = set(source_list)
    return source_list

def w_to_file(f_name, source_list):
    with open(f_name, 'wb') as csvfile:
        bankwriter = csv.writer(csvfile, dialect='excel')
        for each in source_list:
            bankwriter.writerow(match_text.findall(each) + match_hh_company_url(each))

w_to_file('bank_base', listing_employers())

一切都很好,但连接 match_text.findall(each) + match_hh_company_url(each) 存在问题 - 它会引发错误:

Traceback (most recent call last):
  File "salebase.py", line 41, in <module>
    w_to_file('bank_base', listing_employers())
  File "salebase.py", line 33, in w_to_file
    bankwriter.writerow(match_text.findall(each) + match_hh_company_url(each))
TypeError: '_sre.SRE_Pattern' object is not callable

没关系,如果我只使用一个match_,但不适用于+,那很奇怪。 我尝试在 shell 中模拟情况,它有效!:

>>> import re
>>> m = re.compile('\d3')
>>> n = re. compile('[a-z]')
>>> a = ['111 a', 'a333', 'f444b']
>>> for x in a:
...     print m.findall(x)
... 
['111']
['333']
['444']
>>> for x in a:
...     print m.findall(x) + n.findall(x)
... 
['111', 'a']
['333', 'a']
['444', 'f', 'b']
>>>

如果这很重要,我将通过将表达式与文本块匹配来制作source_list,并将其放入列表中。这就是listed_employers() 函数的含义。完整代码在这里:http://pastebin.com/bimhfAtn

那么谁能帮帮我,有什么问题吗?

【问题讨论】:

【参考方案1】:

你应该在那个对象上调用findall

match_hh_company_url.findall(each)

演示:

>>> import re
>>> r = re.compile(r'')
>>> r()
Traceback (most recent call last):
    r()
TypeError: '_sre.SRE_Pattern' object is not callable

>>> r.findall('')
['']

【讨论】:

我又小又瞎又是疯子 %) 我一直在寻找我错过的 1.5 小时!非常感谢! :)

以上是关于_sre.SRE_Pattern 对象在与另一个连接时不可调用的主要内容,如果未能解决你的问题,请参考以下文章

错误:_sre.SRE_Pattern 不可迭代,我正在使用 re.compile() 通过比较起始值并获取此错误来获取字符串

如何获取 MyPy 的正则表达式模式类型

正则表达式的9个方法

如何在与另一个物理体碰撞时阻止物体失去位置

Lambda 函数在与 redis 的简单连接上超时

为啥 React-Native 无法在与 Expo 的 Android 连接上启动项目?