Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式Python不匹配,但在正则表达式上不匹配_Python_Regex - Fatal编程技术网

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

正则表达式Python不匹配,但在正则表达式上不匹配,python,regex,Python,Regex,我目前正在尝试使用正则表达式匹配像墨西哥1-2这样的短语,它在使用正则表达式测试正则表达式时匹配,但在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]*m

我目前正在尝试使用正则表达式匹配像墨西哥1-2这样的短语,它在使用正则表达式测试正则表达式时匹配,但在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中没有,但是测试短语没有。但以下两种情况都匹配:
喀麦隆1-1墨西哥#葡萄酒杯#世界杯

使用

if re.match(regex, testtweet) is not None:
        print "Is true"
要测试,您需要使用

您没有进行匹配,因为默认情况下,
re.match
将正则表达式锚定在字符串的开头,就像您的正则表达式是
^(墨西哥…
(等):

其次,在前面放一个
r
是一个很好的习惯,可以将python正则表达式字符串作为原始字符串:

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'
你需要使用

您没有进行匹配,因为默认情况下,
re.match
将正则表达式锚定在字符串的开头,就像您的正则表达式是
^(墨西哥…
(等):

其次,在前面放一个
r
是一个很好的习惯,可以将python正则表达式字符串作为原始字符串:

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'

请显示您的代码。我怀疑您使用的是
re.match
,而您应该使用
re.search
。您必须使用原始字符串:
regex=r'(墨西哥…”
正确,我使用的是:if re.match(regex,testtweet)不是None:print“is true”请显示您的代码。我怀疑您正在使用
re.match
,而您应该使用
re.search
。您必须使用原始字符串:
regex=r'(墨西哥…”
正确,我正在使用:如果re.match(regex,testtweet)不是None:print“is true”完美修复了它,现在感觉有点愚蠢!完美修复了它,现在感觉有点愚蠢!