Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何构造适用于多种情况的正则表达式_Python_Regex_Python 2.x - Fatal编程技术网

Python 如何构造适用于多种情况的正则表达式

Python 如何构造适用于多种情况的正则表达式,python,regex,python-2.x,Python,Regex,Python 2.x,我有以下与comments变量中的字符串匹配的代码,如何构造与以下两个注释匹配的字符串?我想检查QSPR测试结果:\siggy.*和测试结果:* import re comments = "QSPR TEST RESULTS:\\siggy\QSPRLog\QCA\CST\2016\3\28\TestCaseLogs\N12345678-3_28_16_16_36_29_000_635947797916487681.html are the results" #comments = "T

我有以下与comments变量中的字符串匹配的代码,如何构造与以下两个注释匹配的字符串?我想检查QSPR测试结果:\siggy.*和测试结果:*

import re    
comments = "QSPR TEST RESULTS:\\siggy\QSPRLog\QCA\CST\2016\3\28\TestCaseLogs\N12345678-3_28_16_16_36_29_000_635947797916487681.html are the results"
#comments = "TEST RESULTS:BT ON\OFF LOOKS GOOD"

def matchcomments(comments, matchstring):
  matchobj = re.search(matchstring, str(comments))
  if matchobj:
    return True
  return False

def main ():
  try:
        string = r"QSPR TEST RESULTS:\\siggy\.*"
        match = matchcomments(comments, string)
        if match == True:
          tested_bit_flag = True
        else:
          #string = r"Included in BIT"  
          string = r"DONOT MATCH"                                    
          match = matchcomments(comments, string)
          if match == True:
            tested_bit_flag = True
          else:
            tested_bit_flag = False                                         
  except KeyError:
        tested_bit_flag = False 
        print "This gerrit does not have comments:"
  print tested_bit_flag



if __name__ == "__main__":
  main()
用这个

comments = "QSPR TEST RESULTS:\\siggy\QSPRLog\QCA\CST\2016\3\28\TestCaseLogs\N12345678-3_28_16_16_36_29_000_635947797916487681.html are the results"
string = r"(?:QSPR)?\s?TEST\sRESULTS:\\siggy\\(.*)|(?:DONOT MATCH)"
matchobj = re.search(string, comments)
if matchobj:
    print True
    print matchobj.group(1) #Gives you the text you are interested in eg. QSPRLog\QCA\CST\2016\3\28\TestCaseLogs\N12345678-3_28_16_16_36_29_000_635947797916487681.html are the results
else:
    print False
说明:

(?:QSPR)?(?:不匹配)

(?:)表示非捕获组。我们的想法是检查团队的存在或不存在(在本例中为QSPR或DONOT MATCH),而不关心匹配是什么(因为我们已经知道它是什么)。末尾的问号表示该组是可选的

\s?测试\s结果:\siggy\

这一部分与文中给出的内容非常匹配

(.*)

捕获组中您感兴趣的文本。请注意,这是唯一的(捕获)组,因此当您使用参数1调用match对象的group属性时,您将获得感兴趣的文本

还请注意,此正则表达式将捕获0个或更多字符。替换为(.+),以捕获一个或多个字符,以确保非空


|字符表示左侧或右侧的表达式应该匹配。在这种特殊情况下,由于右侧表达式中没有组(?:DONOT MATCH),因此当comments=“DONOT MATCH”返回None时调用matchobj.group(1)。确保稍后在代码中对此进行检查。

如果我理解正确:

^(?:QSPR )?TEST RESULTS:.+$
这应该与您感兴趣的文本相匹配


如果字符串为QSPRTES RESULTS:\\siggy\.*它将不匹配任何内容。可以添加哪些内容来确保它不是空的,并且有一些文本(字母/字母表/特殊字符的组合等)是否存在不能仅匹配“测试结果”的原因:?(它也将匹配“QSPR测试结果:\\siggy\.*”目标不明确。@root2-我想要QSPR测试结果的精确匹配:\\siggy\and TEST RESULTS:准确地说:
QSPR测试结果:测试结果:
您能解释这个regex吗?不知怎么它与QSPR测试结果不匹配:\\siggy\cstry,我想我可能误解了这个问题。您确定需要使用常规express吗要这样做吗?是的,我需要使用正则表达式,如果不是的话,你有什么建议?我需要一个精确匹配的
QSPR测试结果:或测试结果:
这不匹配
QSPR测试结果:\\siggy\QSPRLog\QCA\CST\2016\3\29\TestCaseLogs\NA-3\u 29\u 16\u 8\u 40\u 33\u 000\u 635948376366719346.html
^(?:QSPR )?TEST RESULTS:.+$