正则表达式Python不匹配,但在正则表达式上不匹配
我目前正在尝试使用正则表达式匹配像墨西哥1-2这样的短语,它在使用正则表达式测试正则表达式时匹配,但在Python中使用re时不匹配 我的正则表达式是:正则表达式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
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”完美修复了它,现在感觉有点愚蠢!完美修复了它,现在感觉有点愚蠢!