3 回答
TA贡献1891条经验 获得超3个赞
re.search您可以使用re.findall一个非常简短且简单的模式来一次查找所有法官,而不是 multiple :
import re
text = """Considered and decided by Hemingway, Presiding Judge; Bell,
Judge; and \n
\n
Dickinson, Emily, Judge."""
matches = re.findall(r"(\w+,)?\s(\w+),(\s+Presiding)?\s+Judge", text)
print(matches)
哪个打印:
[('', 'Hemingway', ' Presiding'), ('', 'Bell', ''), ('Dickinson,', 'Emily', '')]
所有原始信息都在那里:每个法官的名字、姓氏和“主审属性”(如果主审法官与否)。之后,您可以将此原始信息输入到满足您需求的数据结构中,例如:
judges = []
for match in matches:
if match[0]:
first_name = match[1]
last_name = match[0]
else:
first_name = ""
last_name = match[1]
presiding = "Presiding" in match[2]
judges.append((first_name, last_name, presiding))
print(judges)
哪个打印:
[('', 'Hemingway', True), ('', 'Bell', False), ('Emily', 'Dickinson,', False)]
如您所见,现在您有一个元组列表,其中第一个元素是名字(如果在文本中指定),第二个元素是姓氏,第三个元素是bool法官是主审法官还是主审法官不是。
显然,该模式适用于您提供的示例。但是,由于(\w+,)?\s(\w+),(\s+Presiding)?\s+Judge是这样一个简单的模式,因此需要注意一些边缘情况,其中模式可能会返回错误的结果:
只会匹配一个名字。名称 like
Dickinson, Emily Mary
将导致Mary
检测为姓氏。姓氏之类的
de Broglie
只会导致Broglie
匹配,因此de
会丢失。...
您必须查看这是否符合您的需求,或者为您的数据问题提供更多信息。
添加回答
举报