Python正则表达式从文本文件编译作业标题

Python正则表达式从文本文件编译作业标题,python,regex,Python,Regex,我有一个文本文件,其格式如下,每一列由选项卡空间分隔: CAMPUS NAME TITLE AUJV "Judith" Research Technician Associate BRGE "Aagesen" ADJUNCT CLINICAL INSTRUCTOR YJFF "Matthew" HOUSE OFFICER IV 我想写一个正则表达式,找到第三列的字符,即第二个制表符空间之后的字符,并将它们标记为“jobtitle”。目的是将工作标题分组在

我有一个文本文件,其格式如下,每一列由选项卡空间分隔:

CAMPUS  NAME    TITLE
AUJV    "Judith"    Research Technician Associate
BRGE    "Aagesen"   ADJUNCT CLINICAL INSTRUCTOR
YJFF    "Matthew"   HOUSE OFFICER IV
我想写一个正则表达式,找到第三列的字符,即第二个制表符空间之后的字符,并将它们标记为“jobtitle”。目的是将工作标题分组在一起,以便我可以按频率对它们进行排序

这就是我到目前为止所拥有的,我确信我匹配到了错误的字符:

jobtitle_re = re.compile(r"[^\t\w\t]+,(?P<jobtitle>\w+)", re.I)

我不明白为什么split对你不起作用,但这里有一个正则表达式作为替代:

^[A-Z]+[ \t]+"\w+"[ \t]+(?P<jobtitle>[\w ]+)$
^[A-Z]+[\t]+“\w+”[\t]+(?P[\w]+)$


请注意,如果它是真正的制表符,您可以将
[\t]+
更改为
\t+

我也不明白您为什么需要正则表达式。那么

from collections import Counter

titles = []

for line in salary_file.readlines():
    line.rstrip()
    (campus, name, title) = line.split('\t')
    titles.append(title)

print "\nMost common job titles\n-------"

for i, (title, titlecount) in enumerate(Counter(titles).most_common()):
  print "%d. %s\t%s" % (i, title, titlecount)

天哪!你不需要正则表达式。改为按制表符拆分。如果是以制表符分隔的,则str.Split是更好的解决方案。我按频率对作业标题进行排序,这就是为什么我需要正则表达式将它们组合在一起。请修复缩进。“我按频率对作业标题进行排序,这就是为什么我需要正则表达式将它们组合在一起”-这根本没有意义。正则表达式组是单个字符串中的字符组,而不是多个字符串中的匹配组。我尝试了您的建议,得到了以下结果:AttributeError:“NoneType”对象没有属性“group”。我可以问一下我哪里出错了吗?我不熟悉Python,所以我恐怕帮不了什么忙。根据“Python”下的Debuggex,我仔细检查了正则表达式是否可靠。@user3440320 aliterramind的正则表达式试图从文件的整行中提取校园、名称和标题。您已经在使用
字符串.split('\t')
执行此操作,然后将正则表达式仅应用于标题文本。它不会匹配任何内容,因此在调用
match(title).group('jobtitle')
时,对match的调用将返回None(no match),然后您尝试调用.group(),这将抛出一个AttributeError。感谢Debuggex引用,它帮助我用测试数据可视化字符串的位置。谢谢,我现在理解了您的方法,它像奇迹一样工作。
from collections import Counter

titles = []

for line in salary_file.readlines():
    line.rstrip()
    (campus, name, title) = line.split('\t')
    titles.append(title)

print "\nMost common job titles\n-------"

for i, (title, titlecount) in enumerate(Counter(titles).most_common()):
  print "%d. %s\t%s" % (i, title, titlecount)