单个正则表达式 - 仅匹配完全定义的名称

Single regex - match only exactly defined names

有大量的全名列表,我只需要过滤那些名字超过 3 个字母字符且姓氏超过 7 个字母字符的名字。全名应仅包含 1 个名字和 1 个姓氏,由单个 space 分隔。名字和姓氏中均不允许使用特殊字符。全名总长度不能超过26个字符。

我不知道如何组合条件,就好像我把量词放在括号后面一样,它不会比较全名的长度,而是比较正则表达式匹配输入文本的次数。

(([A-Za-z]{3,} [A-Za-z]{7,}){26}

这肯定可以通过多个正则表达式来完成。困难的部分是创建一个单一的正则表达式,这是必须的。

您可以使用前瞻:

(?=^.{1,26}$)([A-Za-z]{3,} [A-Za-z]{7,})

第一部分会断言长度是从0到26,第二部分是匹配名字的规则。

试试这个正则表达式:

(?=^[a-z]{3,}\s[a-z]{7,}$)(.*){1,27} //global,case-insensitive

它使用零长度前瞻断言来满足逻辑条件(3+首先,一个space,7+最后,只有字母),并量化 'anything' 到 消耗 适当数量的字符。

regex demo here