正则表达式任务

时间:2011-02-25 03:40:28

标签: regex python-3.x

下面是我需要解析的文本文件的示例。

Lead Attorney: John Doe
Staff Attorneys: John Doe Jr. Paralegal: John Doe III
Geographic Area: Wisconsin
Affiliated Offices: None
E-mail: blah@blah.com

我需要解析所有键/值对并将其导入数据库。例如,我将'John Doe'插入[Lead Attorney]专栏。我开始使用正则表达式,但在解析第2行时遇到了问题:

Staff Attorneys: John Doe Jr. Paralegal: John Doe III

我从以下正则表达式开始:

(\w*.?\w+):\s*(.)(?!(\w.?\w+:.*))

但这并没有解析出“员工律师:John Doe Jr.”和'律师助理:John Doe III'。即使键/值对在同一行,我如何确保我的正则表达式为每个键/值对返回两个组?谢谢!

1 个答案:

答案 0 :(得分:0)

是否有任何类型的密钥显示为第二个密钥?可以先通过data.replace('Paralegal:', '\nParalegal:')修复上面的文本。然后每行只有一个键/值对,它变得微不足道了:

>>> data = """Lead Attorney: John Doe
... Staff Attorneys: John Doe Jr. Paralegal: John Doe III
... Geographic Area: Wisconsin
... Affiliated Offices: None
... E-mail: blah@blah.com"""
>>> 
>>> result = {}
>>> data = data.replace('Paralegal:', '\nParalegal:')
>>> for line in data.splitlines():
...     key, val = line.split(':', 1)
...     result[key.strip()] = val.strip()
... 
>>> print(result)
{'Staff Attorneys': 'John Doe Jr.', 'Lead Attorney': 'John Doe', 'Paralegal': 'John Doe III', 'Affiliated Offices': 'None', 'Geographic Area': 'Wisconsin', 'E-mail': 'blah@blah.com'}

如果首先出现“Paralegal:”,那么只有当它不是第一个时才能进行正则表达式,或者制作一个.find并检查之前的字符是否不是新行。如果有多个关键字可以显示如下,则可以列出关键字等。

如果关键字可以是任何内容,但只有一个单词,则可以查找“:”并向后解析空格,这可以通过regexp来完成。

如果关键字可以是任何内容并包含空格,则无法自动执行。