使用Python正则表达式无法获得预期的结果

时间:2011-09-20 22:05:26

标签: python regex

我也尝试了[a-zA-Z]{2,}-\d+,但结果相同

def verify_commit_text(tags):
    for line in tags:
        if re.match('^NO-TIK',line):
            return True
        elif re.match('^NO-REVIEW', line):
            return True
        elif re.match('[a-zA-Z]-[0-9][0-9]', line):
            return True
        else:
            return False
if __name__ == '__main__':
    commit_text_verified = verify_commit_text(os.popen('hg tip --template "{desc}"'));
    #commit_text_verified = verify_commit_text(os.popen('hg log -r $1  --template "{desc}"'));
    if (commit_text_verified):
        sys.exit(0)
    else:
        print >> sys.stderr, ('[obey the rules!]')
        sys.exit(1);

如果我使用正则表达式"JIRA-1234"

 elif re.match('[a-zA-Z]-[0-9][0-9]', line):

似乎没有用,我得到了:

[obey the rules!]

在stdout上。

2 个答案:

答案 0 :(得分:2)

正则表达式正如您指定的那样工作..它正在搜索 1 字符和 1 数字。你可能想要像

这样的东西
re.match(r'[a-zA-Z]+-\d+\Z', line)

此外,总是在正则表达式字符串前加上“r”,如上所述。或者它会咬你。

答案 1 :(得分:1)

由于您想要匹配一个或多个字母和数字,您需要使用+,如下所示:

r'[a-zA-Z]+-\d+'

您还可以使用{}指定一定数量的字母(例如):

r'[a-zA-Z]{2,}-\d{4}'

此处,{2,}表示2个或更多,{4}表示正好4,{,3}表示0-3,{1,5}表示1-5个包含。