希伯来语中的姓氏可以是英文格式,只是字母的常规组合,如“史密斯”,“阵营”,“杰克”等,或两个单词的组合,其中包含空格中间,如“Ben David”,“Bar Yohay”,“Yom Tov”。我试图创建一个正则表达式,允许第一种格式 - 至少两个字母长的姓氏,或第二种格式 - 由两个单词组成的姓氏,每个字母长两个或多个字母,空格中间。这就是我想出的:
(我知道它不允许大写字母) 由于某种原因,它确实允许第一种格式的名称,如Smith和Jerry,但不允许第二种格式的名称。中间的空间格式有问题吗?对于regexp专业人员来说,这应该是一个简单的方法。提前谢谢:)
答案 0 :(得分:2)
您可以将正则表达式简化为
^[a-z]{2,}(?: [a-z]{2,})?$
答案 1 :(得分:1)
您滥用锚点(^
和$
)。它们分别匹配字符串的开头和结尾。你真正想要的是:
(^[a-z]{2,}$)|(^([a-z]{2,})([ ])([a-z]{2,})$)
此外,您可以将表达简化为:
^[a-z]{2,}$|^[a-z]{2,} [a-z]{2,}$
除非您特别需要捕获群组。
或(所以你只需要一对锚):
^(?:[a-z]{2,}|[a-z]{2,} [a-z]{2,})$
(?:...)
是一个非捕获组,是限制更改范围所必需的。