我想为以下文本编写正则表达式

时间:2019-02-07 07:35:06

标签: python regex

我正在尝试解析这种格式的文本:

第一巡回法院美国纽约南区地方法院法官史密斯(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}\(.*\))?

非常感谢。

1 个答案:

答案 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
-----