我有这段代码只是为了测试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!!"
。
有人可以帮助我吗?
提前致谢
答案 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')]