以下代码不会为匹配返回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)
答案 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()
函数,因此我建议您更改它。