我有一个非常长的文件,我设法使用Python正则表达式一次解析一个值,例如,这是我用来打印<h2>
标签之间的所有值的代码:
import os
import re
def query():
f = open('company.txt', 'r')
names = re.findall(r'<h2>(.*?)</h2>', f.read(), re.DOTALL)
for name in names:
print name
if __name__=="__main__":
query()
我也重复同样的事情来打印area_code
。但这次,我只是替换findall函数中的 pattern 来打印区号。这意味着我必须运行两次代码。
我的问题是,有没有办法简单地同时运行两个查询并将结果打印在由管道(|)分隔的一行中?
像这样:Planner | B21
下面是我试图解析的简短示例文件。
<h2>Planner</h2>
area_place = 'City of Angels';
area_code = 'B21';
period = 'Summer';
... more content
<h2>Executive</h2>
area_place = 'London';
area_code = 'D33';
period = 'Winter';
...more content
答案 0 :(得分:0)
这对我的Python 2.7测试数据很有帮助,试试看:
import os
import re
def query():
f = open('company.txt', 'r')
names = re.findall(r"<h2>(.+?)</h2>.*?area_code = '(.+?)'", f.read(), re.DOTALL)
for name in names:
print name[0] + " | " + name[1]
if __name__=="__main__":
query()
基本上,我只是将两个查询合并为一个,然后以数字方式指定捕获组。您可能想要重命名“名称”,因为它的方式不太重要。
或者,如果您想保留现有的查询,并且可以假设它们的长度相同,那么您可以执行以下操作:
names = re.findall(your names regex)
area_codes = re.findall(your area code regex)
for i in range(len(names)): //very dangerous, if there's one failed match many entries may be mismatched!
print names[i] + " | " + area_codes[i]
但是,除非您对数据的规律性非常有信心,否则我不会推荐这种方法。