单个正则表达式 - 仅匹配完全定义的名称
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' 到 消耗 适当数量的字符。
有大量的全名列表,我只需要过滤那些名字超过 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' 到 消耗 适当数量的字符。