正则表达式用于文本文件上的名称提取

时间:2014-10-03 23:58:21

标签: python regex

我有一个包含作者和摘要列表的纯文本文件,我正在尝试仅提取用于网络分析的作者姓名。我的文字遵循这种模式,包含500多个摘要:

2010 - NUCLEAR FORENSICS OF SPECIAL NUCLEAR MATERIAL AT LOS ALAMOS: THREE RECENT STUDIES 

Purchase this article

David L. Gallimore, Los Alamos National Laboratory

Katherine Garduno, Los Alamos National Laboratory

Russell C. Keller, Los Alamos National Laboratory

Nuclear forensics of special nuclear materials is a highly specialized field because there are few analytical laboratories in the world that can safely handle nuclear materials, perform high accuracy and precision analysis using validated analytical methods.

我正在使用带有re库的Python 2.7.6。

我试过

regex = re.compile(r'( [A-Z][a-z]*,+)')
print regex.findall(text)

仅提取姓氏,加上摘要中逗号前的任何大写单词。

使用(r'.*,')可以完美地提取全名,但也可以获取我不需要的整个摘要。

也许正则表达式是错误的做法?任何帮助或想法都表示赞赏。

2 个答案:

答案 0 :(得分:2)

如果您尝试匹配名称,我会尝试匹配整个子字符串而不是其中的一部分。

您可以使用以下正则表达式并根据需要进行修改。

>>> regex = re.compile(r'\b([A-Z][a-z]+(?: [A-Z]\.)? [A-Z][a-z]+),')
>>> print regex.findall(text)
['David L. Gallimore', 'Katherine Garduno', 'Russell C. Keller']

Working Demo | Explanation

答案 1 :(得分:0)

尝试这个

[A-Za-z]* ?([A-Za-z]+.) [A-Za-z]*(?:,+)

它使中间名可选,加上它将结果中的逗号排除在非捕获组中