python中的正则表达式与任何东西都不匹配

时间:2015-07-08 07:20:03

标签: python regex

我有这段代码只是为了测试Python中的正则表达式。

#!/usr/bin/python
import re

line = "(400,71.20,73.40) Cats are smarter than dogs"

matchObj = re.match( r'(\d{3}),(\d{2}.\d{2}),(\d{2}.\d{2})', line,re.I)

if matchObj:
   print "matchObj.group() : ", matchObj.group()
   print "matchObj.group(1) : ", matchObj.group(1)
   print "matchObj.group(2) : ", matchObj.group(2)
else:
   print "No match!!"

它应该打印3组(400)(71.20)(73.40),而是始终打印"No Match!!"

有人可以帮助我吗?

提前致谢

2 个答案:

答案 0 :(得分:1)

这是因为函数re.match试图从字符串的开头匹配。由于开头存在无法匹配的(,因此正则表达式失败。因此,添加模式以匹配(中的起始re.match符号将解决您的问题。

re.match( r'\((\d{3}),(\d{2}\.\d{2}),(\d{2}\.\d{2})', line)

此处re.I也是不必要的,因为我们匹配字母以外的字符。

我建议你使用re.search来匹配任何地方存在的子字符串。

re.search( r'(\d{3}),(\d{2}\.\d{2}),(\d{2}\.\d{2})', line)

答案 1 :(得分:0)

只需在您的正则表达式中加入\(作为match匹配的开头,并且您的字符串以(作为开头。

或仅使用re.findall

line = "(400,71.20,73.40) Cats are smarter than dogs"

matchObj = re.findall( r'\((\d{3}),(\d{2}\.\d{2}),(\d{2}\.\d{2})', line)
print matchObj

输出:[('400', '71.20', '73.40')]