如果名称有效,我想返回true。名称可以包含:


大写或小写字符
没有数字或特殊字符
可以是一个或两个单词,中间有一个空格
名字和姓氏可以在2-25个字符之间


例如。


John Smith =真
John =真
JoHn =真
John Sm1th =否
John $mith =否
J0hn =否
John Smith = false(名称之间有两个空格)


到目前为止,这是我的代码。它无法通过其中一些测试用例。

import re

if re.findall('[A-Za-z]{2,25}\s[A-Za-z]{2,25}', string):
    print("true")
else:
    print("false")

最佳答案

要匹配一个或两个单词,您需要使名字或姓氏为可选,还需要锚点以确保它不是部分匹配或使用re.fullmatch而不是re.findall

lst = ['John Smith', 'John', 'JoHn', 'John Sm1th', 'John $mith', 'J0hn', 'John  Smith']

import re
[re.fullmatch('[A-Za-z]{2,25}( [A-Za-z]{2,25})?', x) for x in lst]
# [<_sre.SRE_Match object; span=(0, 10), match='John Smith'>, <_sre.SRE_Match object; span=(0, 4), match='John'>, <_sre.SRE_Match object; span=(0, 4), match='JoHn'>, None, None, None, None]


将结果转换为布尔值:

[bool(re.fullmatch('[A-Za-z]{2,25}( [A-Za-z]{2,25})?', x)) for x in lst]
# [True, True, True, False, False, False, False]

关于python - 使用Python正则表达式验证名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47877144/

10-11 23:09
查看更多