Python:使用正则表达式检查str

时间:2017-09-19 15:14:52

标签: python regex

我需要编写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\.-]+,但它并不表示必须输入。

我该如何解决?

3 个答案:

答案 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