Python 2.7 与变量名匹配的Python正则表达式模式不起作用
对于匹配,下面的代码不会返回True。我想知道为什么?感谢您的帮助 注: id_list=['yyyy-100','yyyymm1640ass20','Cruzer','SSDSC2BA20','BBBPEDMD40'] “drives.txt”包含这样的行(在某些行中确实包含上述ID) “红色SSDSC2BA200G4R 200 GB 2.5 SATA 6G E类:每秒写入30000-100000次” 因此,我假设id‘SSDSC2BA20’将匹配上面一行中的第二个单词,但下面的匹配不会返回True。 为了进行双重检查,我尝试了“if match:print match.group()”,但也没有返回任何结果。我错过了什么Python 2.7 与变量名匹配的Python正则表达式模式不起作用,python-2.7,Python 2.7,对于匹配,下面的代码不会返回True。我想知道为什么?感谢您的帮助 注: id_list=['yyyy-100','yyyymm1640ass20','Cruzer','SSDSC2BA20','BBBPEDMD40'] “drives.txt”包含这样的行(在某些行中确实包含上述ID) “红色SSDSC2BA200G4R 200 GB 2.5 SATA 6G E类:每秒写入30000-100000次” 因此,我假设id‘SSDSC2BA20’将匹配上面一行中的第二个单词,但下面的匹配不会返回T
请注意,我没有使用上面的正则表达式,而是尝试了下面的正则表达式,但这也不起作用。 我的正则表达式=r“?+r.escape(id)+r” 匹配=重新搜索(my_regex,line,re.I)
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()
函数,因此我建议您更改它
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