Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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 2.7 与变量名匹配的Python正则表达式模式不起作用_Python 2.7 - Fatal编程技术网

Python 2.7 与变量名匹配的Python正则表达式模式不起作用

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

对于匹配,下面的代码不会返回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()”,但也没有返回任何结果。我错过了什么



请注意,我没有使用上面的正则表达式,而是尝试了下面的正则表达式,但这也不起作用。 我的正则表达式=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