我正在尝试解析这种格式的文本:
第一巡回法院美国纽约南区地方法院法官史密斯(JOHN T。)
在文本中,我要捕获:
电路名称:在上面的示例中为1ST CIRCUIT。电路编号可以在1ST和99TH之间。此信息并不总是存在的。
州名:在上面的文本中,纽约南。最多三个字。此信息并不总是存在的。
标题:可以是地区或县长。
姓氏:在这里,是SMITH
名称::名字是JOHN T.,JR
为使问题更清楚,让我再举两个我想解析的文本的例子。
美国第15巡回州地方法院,阿拉巴马州地方法院法官凯瑟琳·奈利
法官托马斯·库克(COOME)法官
我尝试了以下表达式。它能够捕获法官的姓名,但无法捕获电路和状态。
((?P<circuit>\d{1,2}\w{2} Circuit)?\s?(U\.S\. District Court for )?\s?(?
P<state>\b[A-Z]*(\s[A-Z]*)\b)*)?.* (?<=Judge )(?P<lname>[A-Z]*), (?P<name>
[A-Z,. ]*)( {1,2}\(.*\))?
非常感谢。
答案 0 :(得分:3)
这应该有帮助。
import re
s = ["1ST Circuit U.S. District Court for NEW YORK SOUTHERN District Judge SMITH, JOHN T., JR", "15TH Circuit U.S. District Court for ALABAMA Magistrate Judge NEELY, CATHERINE"]
for sVal in s:
m = re.search(r"((?P<circuit>\d*(ST|TH) Circuit)) U.S. District Court for (?P<state>\b[A-Z\s]*\b)(?P<title>(District|Magistrate)) Judge (?P<lname>[A-Z]*), (?P<name>.*$)", sVal)
if m:
for i in ["circuit", "state", "title", "lname", "name"]:
print(m.group(i))
print("-----")
输出:
1ST Circuit
NEW YORK SOUTHERN
District
SMITH
JOHN T., JR
-----
15TH Circuit
ALABAMA
Magistrate
NEELY
CATHERINE
-----