Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.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 - Fatal编程技术网

Python 在每行中查找多个正则表达式,如果其中一个正则表达式不';不匹配

Python 在每行中查找多个正则表达式,如果其中一个正则表达式不';不匹配,python,regex,Python,Regex,我有一个变量列表: variables = ['VariableA', 'VariableB','VariableC'] 我要逐行搜索 ifile = open("temp.txt",'r') d = {} match = zeros(len(variables)) for line in ifile: emptyCells=0 for i in range(len(variables)): regex = r'('+variables[i]+r')[:|=

我有一个变量列表:

variables = ['VariableA', 'VariableB','VariableC']
我要逐行搜索

ifile = open("temp.txt",'r')

d = {}

match = zeros(len(variables))
for line in ifile:
    emptyCells=0
    for i in range(len(variables)):
        regex = r'('+variables[i]+r')[:|=|\(](-?\d+(?:\.\d+)?)(?:\))?'
        pattern_variable = re.compile(regex)
        match[i] = re.findall(pattern_variable, line)

        if match[j] == []:
            emptyCells = emptyCells+1

    if emptyCells == 0:
        for k, v in match[j]:
            d.setdefault(k, []).append(v)
要求是我只保留所有正则表达式匹配的行

我想收集字典中每个变量的所有结果,其中变量名是键,值成为所有匹配项的列表


提供的代码只是我到目前为止所发现的,还不能很好地工作…

您能否编辑您的问题以给出源文件的示例,以便我们可以针对它测试我们的解决方案

不管怎样,这里有一个快速破解:

from collections import defaultdict
import re

variables = ['VariableA', 'VariableB', 'VariableC']
regexes = [re.compile(r'(%s)[:|=|\(](-?\d+(?:\.\d+)?)(?:\))?' % (variable,))
           for variable in variables]
d = defaultdict(list)

with open("temp.txt") as f:
    for line in f:
        results = [regex.search(line) for regex in regexes]
        if all(results):
            for m in results:
                k, v = m.groups()
                d[k].append(v)

print d

你可以使用:cat file | grep regexp1 | grep regexp2 |…它应该在windows环境下工作,所以依赖unix实用程序不是很好,我想…你的代码引用了一个变量
j
,而没有定义
j
j
是在别处定义的还是应该是
i
?请澄清。这是完美的!!非常好的解决方案,谢谢!源文件中的典型行:VariableA(2)00:29:10 VariableB=0.221 VariableC:12.600 sensI=0.000