我需要编写func来检查str。 如果适合下一个条件:
1)str应以字母 - ^[a-zA-Z]
2)str应包含字母,数字,。和 - ([\w]+*.-)
3)str应以字母或数字结尾 - \w$
4)str的长度应为10至50
def check_login(str):
flag = False
if match(r'^[a-zA-Z]([\w]*.-)\w${10, 50}', str):
flag = True
return flag
它会将False
返回给所有组合。
我认为,错误在两个条件。我知道,我可以使用[a-zA-Z0-9\.-]+
,但它并不表示必须输入。
我该如何解决?
答案 0 :(得分:1)
使用:
match(r'^[a-zA-Z][\w.-]{8,48}\w$', str)
如果您不想匹配_
:
match(r'^[a-zA-Z][a-zA-Z0-9.-]{8,48}[a-zA-Z0-9]$', str)
如果你想要至少一个dit,一个破折号,一个字母和一个数字:
^[a-zA-Z](?=.*-)(?=.*\.)(?=.*[0-9])[a-zA-Z0-9.-]{8,48}[a-zA-Z0-9]$
(?=....)
是一个lookahead,一个零长度断言,确保我们在字符串中包含其内容。
答案 1 :(得分:1)
使用re.search()
函数的直接方法:
import re
def check_login(s):
return bool(re.search(r'^[a-zA-Z][a-zA-Z0-9.-]{8,48}[a-zA-Z0-9]$', s)
and re.search(r'\.[a-zA-Z0-9]*-|-[a-zA-Z0-9]*\.', s[1:-1]))
# test cases
print(check_login('al-De.5af3asd.2')) # True
print(check_login('3lDe.5af3asd.2')) # False
print(check_login('al-De.5a')) # False
print(check_login('xl-De.5a3333333333333')) # True
答案 2 :(得分:1)
你可以试试这个正则表达式:
import re
final_string = [''] if not re.findall("^[a-zA-Z]{1}[a-zA-Z0-9\-\.]{9,49}\d$|\w$", s) else re.findall("^[a-zA-Z]{1}[a-zA-Z0-9\-\.]{9,49}\d$|\w$", s)
if final_string[0] == s:
#success, a match has been found.
pass