正则表达式Python不匹配,但在正则表达式上

时间:2014-06-13 15:58:16

标签: python regex

我目前正在尝试使用正则表达式匹配墨西哥1 - 2喀麦隆之类的短语,在使用正则表达式测试正则表达式时匹配,但在使用re的Python中没有匹配。

我的正则表达式是:

    regex = '(mexico[\s]*\d[\s]*[-][\s]*\d[\s]*cameroon)|(mexico[\s]*\d[\s]*cameroon[\s]\d)|(mexico[\s]*\d[\s]*[-][\s]*cameroon[\s]*\d)|(cameroon[\s]*\d[\s]*[-][\s]*\d[\s]*mexico)|(cameroon[\s]*\d[\s]*mexico[\s]\d)|(cameroon[\s]*\d[\s]*[-][\s]*mexico[\s]*\d)'

和我的测试短语:

testphrase = RT @remitouja: @TheJUMPsociety cameroon 1 - 1 mexico #winecup #WorldCup"

我在regexpal中成功匹配但不是python,但是testphrase并没有。但两者中的以下匹配:  cameroon 1 - 1 mexico #winecup #WorldCup

使用

if re.match(regex, testtweet) is not None:
        print "Is true"

测试

1 个答案:

答案 0 :(得分:4)

您需要使用re.search

您不匹配,因为默认情况下re.match会将您的正则表达式固定在字符串的开头,就好像您的正则表达式是^(mexico....(等):

if re.search(regex, testtweet) is not None:
    print "Is true"

其次,生成你的python正则表达式字符串是一个好习惯我把r放在前面:

regex = r'(mexico[\s]*\d[\s]*[-][\s]*\d[\s]*cameroon)|(mexico[\s]*\d[\s]*cameroon[\s]\d)|(mexico[\s]*\d[\s]*[-][\s]*cameroon[\s]*\d)|(cameroon[\s]*\d[\s]*[-][\s]*\d[\s]*mexico)|(cameroon[\s]*\d[\s]*mexico[\s]\d)|(cameroon[\s]*\d[\s]*[-][\s]*mexico[\s]*\d)'

接下来,您不需要将-放在方括号或任何其他字符之间(如果它是单独的)。有许多团体可能是少数,所以我相信删除捕获组应该足够了:

regex = r'mexico\s*\d\s*-\s*\d\s*cameroon|mexico\s*\d\s*cameroon\s*\d|mexico\s*\d\s*-\s*cameroon\s*\d|cameroon\s*\d\s*-\s*\d\s*mexico|cameroon\s*\d\s*mexico\s\d|cameroon\s*\d\s*-\s*mexico\s*\d'