我需要编写func来检查str。如果适合下一个条件:
1)str应以字母 - ^[a-zA-Z]
2)str可能包含字母,数字,一个.
和一个-
3)str应以字母或数字结尾
4)str的长度应为1至50
def check_login(str):
flag = False
if match(r'^[a-zA-Z][a-zA-Z0-9.-]{1,50}[a-zA-Z0-9]$', str):
flag = True
return flag
但它应该意味着它以字母开头,[a-zA-Z0-9.-]
的长度大于0且小于51,它以[a-zA-Z0-9]
结束。
如何限制.
和-
的数量并将长度限制写入所有表达式?
我的意思是a
- 应该返回true,qwe123
也是真的。
我该如何解决?
答案 0 :(得分:2)
你需要前瞻:
^ # start of string
(?=^[^.]*\.?[^.]*$) # not a dot, 0+ times, a dot eventually, not a dot
(?=^[^-]*-?[^-]*$) # same with dash
(?=.*[A-Za-z0-9]$) # [A-Za-z0-9] in the end
[A-Za-z][-.A-Za-z0-9]{,49}
$
<小时/>
在Python
中可能是:
import re
rx = re.compile(r'''
^ # start of string
(?=^[^.]*\.?[^.]*$) # not a dot, 0+ times, a dot eventually, not a dot
(?=^[^-]*-?[^-]*$) # same with dash
(?=.*[A-Za-z0-9]$) # [A-Za-z0-9] in the end
[A-Za-z][-.A-Za-z0-9]{,49}
$
''', re.VERBOSE)
strings = ['qwe123', 'qwe-123', 'qwe.123', 'qwe-.-123', '123-']
def check_login(string):
if rx.search(string):
return True
return False
for string in strings:
print("String: {}, Result: {}".format(string, check_login(string)))
这会产生:
String: qwe123, Result: True
String: qwe-123, Result: True
String: qwe.123, Result: True
String: qwe-.-123, Result: False
String: 123-, Result: False