我有一个庞大的文件,只有这些块的重复单元:
//WAYNE ROONEY (wr10)
90 [label="90"];
90 -> 11 [weight=25];
90 -> 21 [weight=23];
90 -> 31 [weight=17];
90 -> 41 [weight=12];
90 -> 51 [weight=1];
90 -> 62 [weight=50];
90 -> 72 [weight=7];
90 -> 82 [weight=27];
90 -> 92 [weight=9];
90 -> 102 [weight=43];
我需要转换为看起来像这样的格式
90 11 25
即。我只需要删除所有额外的东西,并保持数字完全按照它们的方式。
我尝试使用正则表达式,使用以下代码:
for line in filein:
match = re.search('label=" "', line)
if match:
print (match.group())
但它只打印文件中'label'
的所有实例。如果我尝试搜索'label=" "'
,则没有输出。如果我可以阅读标签,那么阅读权重将非常类似于它。
答案 0 :(得分:4)
这个怎么样:
import re
file = open("file","r")
for line in file:
if re.search('->',line):
print ' '.join(re.findall('[0-9]+',line))
输出:
90 11 25
90 21 23
90 31 17
90 41 12
90 51 1
90 62 50
90 72 7
90 82 27
90 92 9
90 102 43
只需重定向即可保存输出:python test.py > newfile
答案 1 :(得分:2)
您可以使用以下内容匹配所有行:
(\d+)
- >一个数字(反向引用)\s*->\s*
- >空间 - >空间(\d+)
- >另一个号码(反向引用)\s*\[weight=\"
- >空格和文字[weigth =“(\d+)
- >另一个号码(反向引用)\];
- >字面意思];结束比赛。然后你有这样的编号后向引用:
现在,您可以使用所需的模式构建字符串。 ($ 1 $ 2 $ 3)
答案 2 :(得分:1)
要获取每行的所有数字,请将r'\d+'
与.findall()
一起使用:
for line in filein:
if 'label' in line:
print 'label:',
print ' '.join(re.findall(r'\d', line))
您想要对label
行做什么并不完全清楚,但是非常简单的循环会打印出来:
label: 90 90
90 11 25
90 21 23
90 31 17
等