Python Regex模式匹配变量名不起作用

时间:2017-06-24 16:38:24

标签: python-2.7

以下代码不会为匹配返回True。我想知道为什么?任何帮助表示赞赏。

注意: id_list = [' YYY-100',' YYYMM1640ASS20',' Cruzer',' SSDSC2BA20',' BBBPEDMD40']

' drives.txt'包含这样的行(并且在某些行中包含上面的ID)。

' RED SSDSC2BA200G4R 200 GB 2.5 SATA 6G E类:每秒30,000-100,000次写入'

所以我会假设id' SSDSC2BA20'将匹配上面一行中的第二个单词,但是匹配下面不会返回True。 对于仔细检查,我尝试了如果匹配:print match.group()'但这也没有回报。我错过了什么?

import re

with open('drives.txt', 'r') as fr:
  for id in id_list:
    for line in fr:
      match = re.search(r'%s' % id, line, re.I)
      if match:
        print 'True'   

请注意,我没有使用上面的正则表达式,而是尝试了以下内容,但这也没有用。   my_regex = r"。?" + re.escape(id)+ r"。?"   match = re.search(my_regex,line,re.I)

1 个答案:

答案 0 :(得分:0)

fr是一个文件指针。使用您当前的方法,您可以多次迭代这些行,每个正则表达式一次。不要这样做。每次读取一行时,都会使文件指针前进,直到指向文件末尾。这发生在第一次迭代本身,因此即将进行的迭代将让您从文件中读取空字符串。

对此的一个解决方法是在每个内循环后执行fr.seek(0, 0),我不建议这样做。另一个解决方法是重新排序循环。迭代你的文件一次。以下是您的表现方式:

with open('drives.txt', 'r') as fr:
    for line in fr:
        for id in id_list:
            match = re.search(r'%s' % id, line, re.I)
            if match:
                print id, 'matches for line:', line  

另外,我应该提一下,使用id作为变量名称会影响内置id()函数,因此我建议您更改它。