我正在尝试创建一个与人名匹配的 Perl 正则表达式。当名称以 Sr 或 Jr 结尾时,其格式正确,以逗号和空格开头,并以句点结尾。
例如:
Should match:
John Smith
John Smith, Sr.
John Smith, Jr.
Should not match:
John Smith Sr
John Smith, Sr
John Smith, SR.
John Smith Sr.
John Smith, John Smith Sr.
John Smith-
还必须正确大写,即 Sr 或 Jr,而不是 sr、SR、sR、jr、JR 或 jR。 名称不应以任何标点符号结尾,使用 Sr 或 Jr 的句点除外。
我试过了
^(?!.(Jr|Sr)(?<!,\sJr.)(?<!,\sSr.)$).$
但是上面的正则表达式允许使用几个不可接受的名称,即 约翰·史密斯, 老约翰·史密斯
然后我发现:
^([A-Za-z]+['-]?[A-Za-z]\s)([A-Za-z]+['-]?[A-Za-z]*)(,\s(Jr|Sr).)?$
但它允许名称以连字符结尾,John Smith-,这是不可接受的。
我想下面的表达方式应该能满足你的要求:
^[A-Za-z -]+(, (Jr|Sr)\.)?(?<! Sr| Jr |-)$
它的工作原理如下:
^[A-Za-z -]+ = 行首有一个或多个字母、空格或连字符
(, (Jr|Sr).)? = 可选地后跟“, Sr.”或“,小”
(?
查看正在运行的正则表达式