查找多个正则表达式,跳过的结果,如果正则表达式的一个不匹配
问题描述:
我有一个变量列表:查找多个正则表达式,跳过的结果,如果正则表达式的一个不匹配
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
+0
这个作品完美!非常好的解决方案,谢谢!源文件中的典型行:VariableA(2)00:29:10 VariableB = 0.221 VariableC:12.600 sensI = 0.000 – user265978 2010-03-22 12:15:25
u可以使用: 猫文件| grep regexp1 | grep regexp2 | ... – Drakosha 2010-03-22 11:30:02
它应该在Windows环境下工作,所以取决于unix公用事业是不是很好,我猜... – user265978 2010-03-22 11:32:03
您的代码引用变量'j'而不定义'j'。在别处定义了“j”还是应该是“我”?请澄清。 – unutbu 2010-03-22 11:38:42