正则表达式:分别捕获名称和部门

时间:2019-10-21 10:32:11

标签: regex

给出诸如

的文本字符串
Assigned to: Hon Keith Davis Dept: S25
Assigned for All Purposes to: Hon. Howard Halm, Dept. 93
Judge Randolph M. Hammock Dept. 93
HONORABLE JOANNE B. O'DONNELL
Honorable Michael S. Williams
Judge:            Hon. Yolanda Orozco

我想记录一下法官的姓名以及他们来自的部门。

到目前为止,我想出的只是名称:

(?i)(?:(?:Hon(?:orable)?|Judge)(?:[:\. ]+))+((?-i)[A-Z][A-Za-z. '-]{3,})

问题在于,对于第1个和第3个字符串,Dept部分已被捕获,因此我得到了Keith Davis DeptRandolph M. Hammock Dept

当我尝试通过添加来添加第二个捕获组时

[, ]+(?:(?:Dept)[\.: ]+([A-Z0-9]+))?

对于上述正则表达式,它适用于前2个字符串,但不适用于其余字符串。

如何从第一个捕获组中排除Dept,并使用第二个捕获组找出部门名称/号码?

当前正则表达式和示例:https://regexr.com/4n85p

2 个答案:

答案 0 :(得分:3)

您可以使用

(?i)(?:(?:Hon(?:orable)?|Judge)[:. ]+)+((?-i)[A-Z][A-Za-z. '-]{3,})(?:[, ]+Dept[.: ]+([A-Z0-9]+))?$

请参见regex demo

详细信息

  • (?i)-区分大小写
  • (?:(?:Hon(?:orable)?|Judge)[:. ]+)+-1+次出现的HonHonorableJudge,后跟1+个冒号,点,空格
  • ((?-i)[A-Z][A-Za-z. '-]{3,})-第1组:
    • (?-i)-区分大小写
    • [A-Z]-大写字母
    • [A-Za-z. '-]{3,}-3个或更多ASCII字母,点,空格,撇号或连字符
  • (?:[, ]+Dept[.: ]+([A-Z0-9]+))?-一个可选的非捕获组,匹配以下情况的1或0:
    • [, ]+-1个以上的逗号或空格
    • Dept-文字
    • [.: ]+-1个以上的点,冒号或空格
    • ([A-Z0-9]+)-第2组:1个以上大写字母或数字
  • $-字符串的结尾。

更多提示:

  • 如果您只想对整个单词进行匹配,请在\b之后添加(?i)
  • 要匹配任何空格,请用\s(或\h(如果支持-仅匹配水平空格)替换文字空间)。

答案 1 :(得分:0)

.*(?:(?:H[Oo][nN](?:[oO][a-zA-Z]+(?:[^.])?)?)|(?:Judge:?))\.?\s*([a-zA-Z .']+),?\s*(?:Dept[:.]\s*([a-zA-Z0-9]+))?\n

请在您的link

中尝试上述表达式
.*(?:(?:H[Oo][nN](?:[oO][a-zA-Z]+(?:[^.])?)?)|(?:Judge:?))\.?\s*(?<judge_name>[a-zA-Z .']+),?\s*(?:Dept[:.]\s*(?<department>[a-zA-Z0-9]+))?\n