Regex Python不匹配,但在regexp上不匹配

2024-07-08 07:56:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在尝试使用regex匹配像mexico 1-2这样的短语,它在使用regexpal测试regex时匹配,但是在Python中没有使用re匹配。你知道吗

我的正则表达式是:

    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"

测试


Tags: re语言ifmatchregexrtmexicoworldcup
1条回答
网友
1楼 · 发布于 2024-07-08 07:56:04

你需要使用^{}。你知道吗

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

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

其次,在python regex字符串前面加上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'

相关问题 更多 >

    热门问题