我怎么能匹配这个字符串?

时间:2014-04-11 12:14:54

标签: python regex

当我有一个大字符串时: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"

3 个答案:

答案 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"