当我有一个大字符串时:XXX;XXX,2014-04-11 14:06:54,XXX,00:00:00
然后re.search不符合任何想法如何解决它?
line= "connect data::Adata::Bdata::XXX;XXX,2014-04-11 14:06:54,XXX,00:00:00data::Cdata::D12data::EFdata::end"
if line.startswith("connect"):
if re.search(r'connect data::[^:]+::[^:]+::[^:]+::[^:]+::[^:]+::[^:]+::end$', line):
print "OK"
答案 0 :(得分:3)
这可能是一个更简单的解决方案:
arr = line.split("::")
if len(arr) == 8 and arr[0] == "connect data" and arr[7] == "end":
print "OK"
不需要正则表达式。你没有验证任何这些东西的内容;您只是检查令牌总数,分隔符和开始/结束令牌。
答案 1 :(得分:2)
由于第四个[^:]+
与:
不匹配,因此无法匹配。
尝试将[^:]
替换为.+?
。
答案 2 :(得分:1)
您还在小时和分钟之间匹配:
个字符。试试这个:
if re.search(r'connect data::[^:]+::[^:]+::[^:]+:[^:]+:[^:]+:[^:]+:[^:]+::[^:]+::[^:]+::[^:]+::end$', line):
此外,如果使用插入符号^
进行检查以匹配行的开头,则可以跳过第一个:
if re.search(r'^connect data::[^:]+::[^:]+::[^:]+:[^:]+:[^:]+:[^:]+:[^:]+::[^:]+::[^:]+::[^:]+::end$', line):
print "OK"