标题说明了一切,但我会提供一个例子。
ex. "Fred Hendricks" True
ex. "Casey Vegies-fish" True
ex. "Casey Veg-ie-s" False
这是我到目前为止所做的:
^(((Mr.\s)|(Mrs.\s)|(Ms.\s)|(Dr.\s)|(Hon.\s)|(Prof.\s))?[a-zA-Z]+)\s(([A-Z][.][ ]))?([a-zA-Z]+((\sJr.)|(\sPh.D.)|(\sM.D.)|(\sII)|(\sIII)|(\sIV))?)$
答案 0 :(得分:1)
在某种情况下,您必须同时强制执行边界 允许单词和破折号,但中间不超过2个破折号。
为了做到这一点,你必须强制破折号不符合资格 开头或结尾的单词边界 而在同一时间,允许它在中间。
注意 - 您可以使用空白边界而不是单词边界
(?<!\S) .. (?!\S)
。代替(?<!-)\b .. \b(?!-)
。
这是更好的选择。
(?<!-)\b(?!(?:[^\W-]*-){2})\w(?:-?\w)*\b(?!-)
格式化:
(?<! - )
\b # Word boundary, but not a dash behind
(?! # Not 2 or more dashes in this word
(?: [^\W-]* - ){2}
)
\w # Starts with a word char
(?: # Optional many dash then word char
-?
\w
)*
\b # Word boundary, but not a dash ahead
(?! - )
答案 1 :(得分:1)
表达式中与姓氏匹配的部分是[a-zA-Z]+
。您可以使用量词[a-zA-Z]+(-[a-zA-Z]+)?
(一次或根本不更改)将其更改为?
来调整它以接受一个短划线。