Perl正则表达式验证格式规范的含Sr./Jr.的人名
Perl正则匹配规范人名的解决方案
匹配规则明确
需要匹配的人名需满足以下要求:
- 普通全名(如
John Smith):不能以标点符号结尾 - 带后缀的全名:必须是
, Sr.或, Jr.格式,即逗号加空格开头、句点结尾,且Sr/Jr首字母大写,其余小写(禁止sr、SR等其他大小写组合)
正确的正则表达式
^[A-Za-z]+(?:['-][A-Za-z]+)*\s[A-Za-z]+(?:['-][A-Za-z]+)*(?:,\s(Jr|Sr)\.)?$
正则各部分解析
^:锚定字符串开头[A-Za-z]+(?:['-][A-Za-z]+)*:匹配名字部分,允许包含单引号或连字符(如O'Connor、Mary-Ann),确保标点前后都有字母,避免人名以标点结尾\s:匹配名字与姓氏之间的空格[A-Za-z]+(?:['-][A-Za-z]+)*:匹配姓氏部分,规则与名字一致(?:,\s(Jr|Sr)\.)?:可选的后缀非捕获组,严格限定后缀格式为, Sr.或, Jr.,?表示这部分可省略$:锚定字符串结尾
示例验证
匹配成功的案例
John SmithJohn Smith, Sr.John Smith, Jr.
匹配失败的案例
John Smith Sr:缺少逗号空格与句点,不符合后缀格式John Smith, Sr:缺少句点,不符合后缀格式John Smith, SR.:SR大小写不符合要求John Smith Sr.:缺少逗号空格,不符合后缀格式John Smith, John Smith Sr.:包含多余的人名片段John Smith-:姓氏以连字符结尾,违反规则
之前尝试的正则问题分析
- 第一个正则
^(?!.(Jr|Sr)(?<!,\sJr.)(?<!,\sSr.)$).$:逻辑模糊,既没有正确定义人名的结构,也没有严格限制后缀格式,导致错误匹配John Smith,、John Smith Sr.这类不符合要求的内容。 - 第二个正则
^([A-Za-z]+['-]?[A-Za-z]\s)([A-Za-z]+['-]?[A-Za-z]*)(,\s(Jr|Sr).)?$:姓氏部分的['-]?[A-Za-z]*允许标点后无字母,因此会匹配John Smith-这种以连字符结尾的无效人名。
内容的提问来源于stack exchange,提问作者Truper63
相关产品推荐
相关产品推荐

