【发布时间】:2012-09-26 05:54:18
【问题描述】:
我有一个正则表达式,给定全名,应该捕获名字和姓氏。它应该排除后缀,例如“Jr.”:
(.+)\s(.+(?!\sJr\.))
但是这个正则表达式应用于字符串Larry Farry Barry Jones Jr. 给出了匹配:
1. Larry Farry Barry Jones
2. Jr.
为什么我的负前瞻未能忽略“Jr.”解析全名时?我希望匹配 #2 包含“Jones”。
【问题讨论】:
-
它没有给出你期望的原因是因为第二个
.+本身是"Jr.",后面没有(另一个)"Jr."。 -
要非常小心,假设名称是“first”和“last”。许多文化不遵循这个顺序。如果您(天真地)假设您可以拆分名称并在通信中使用您假设的名字,您可能会导致冒犯客户或用户。如果您正在处理 Web 表单,请为两者输入单独的字段。见stackoverflow.com/a/259694/128421 和kalzumeus.com/2010/06/17/…