我的输入文件包含如下格式的数据:
一个; b,c | derp derp" X1234567,Y1234567,Z1234567" derp derp a; b,c |
我想使用Python将其解析为双引号之间的每个项目的多行。
以上示例的输出为:
一个; b,c | derp derp X1234567 derp derp a; b,c |
一个; b,c | derp derp Y1234567 derp derp a; b,c |
一个; b,c | derp derp Z1234567 derp derp a; b,c |
到目前为止,我有这样的事情:
import re
prefix = re.compile ('^(.*?)"')
pattern = re.compile('\"(.*?)([A-Z]{1}[0-9]{7})(.*?)\"')
suffix = re.compile ('"(.*?)$')
for i, line in enumerate(open('myFile.txt')):
for match in re.finditer(pattern, line):
print prefix, match.group(), suffix
但它似乎只返回每个内容的第一场比赛。
答案 0 :(得分:0)
在这种情况下,使用正则表达式而不是简单的字符串和列表操作实际上有很多工作(在我看来)。我会这样做:
#!/usr/bin/env pytohn
with open('myFile.txt','r') as f:
lines = readlines(f)
for line in lines:
line = line.strip()
start = line.find('"')
end = line.find('"',start+1)
data = line[start+1:end].split(',')
data = [x.strip() for x in data]
for x in data:
print line[:start],x,line[end+1:]
这是我在查看您发布的代码后发现的内容:
SRE_Pattern
和prefix
的{{1}}个对象。您应该在外部for循环的每次迭代中记录前缀和后缀的匹配。suffix
将返回整个匹配,而不仅仅是括号中的内容。我认为在大多数情况下你想要match.group()
。match.group(1)
定义为只匹配一个字符串,因为它会在行中依次搜索起始引号,然后是模式的其余部分。因此,它到达第一个引号的索引,检查一次模式,找到pattern
然后继续。X1234567
中的引号之前有反斜杠,因为我不认为这些是特殊字符。pattern
中,它会匹配第一个引号而不是第二个引号,因此suffix
将包含引号之间的内容。suffix
来连接它们。最后,这就是我最终的正则表达式:
+
希望这有帮助,请问任何问题。在最好的时候,正则表达式是一个棘手的野兽。