我有一个包含这样的字符串的文件:
N7300 X-7.254 Y-40.839 A-89.74
N7301 X-7.002 Y-40.847 A-89.806
N7302 X-6.75 Y-40.855 A-89.873
N7303 X-6.511 Y-40.862 A-89.926
N7304 X-6.272 Y-40.868 A-89.979
粗体字符串有负数。我不知道如何从文件中读取这些数字。
我想生成这样的输出:
[(' N',' 7300'),(' X',' -7.254'),( ' Y',' -40.839')。 。 ]
import re
import sys
with open(r'/home/ruchir/Desktop/NewFolder/TEST.txt') as f:
lines=f.readlines()
lines=''.join(lines)
lines=lines.split()
a=[]
for i in lines:
match=re.match(r"([a-z]+)([0-9]*\.?[0-9]+)",i,re.I)
if match:
a.append(match.groups())
print a
我写的这个程序运行正常但不适用于负整数.. !! Plzz帮助我,我是Python的新手......
答案 0 :(得分:2)
尝试这样的事情:
result=re.findall(r"([a-z]+)(-?[0-9]*\.?[0-9]+)","N7303 X-6.511 Y-40.862 A-89.926",re.I)
print result
导致:
[('N', '7303'), ('X', '-6.511'), ('Y', '-40.862'), ('A', '-89.926')]
请注意-?
位。它在数字之前可以使用可选的连字符。
答案 1 :(得分:1)
我会沿着这些方向做点什么:
contents='''\
N7300 X-7.254 Y-40.839 A-89.74
N7301 X-7.002 Y-40.847 A-89.806
N7302 X-6.75 Y-40.855 A-89.873
N7303 X-6.511 Y-40.862 A-89.926
N7304 X-6.272 Y-40.868 A-89.979'''
import re
pat=re.compile(r'(?:(\w)([-+]?[0-9]*\.?[0-9]+))')
for line in contents.splitlines():
ld=[ m.groups() for m in pat.finditer(line)]
print ld
打印:
[('N', '7300'), ('X', '-7.254'), ('Y', '-40.839'), ('A', '-89.74')]
[('N', '7301'), ('X', '-7.002'), ('Y', '-40.847'), ('A', '-89.806')]
[('N', '7302'), ('X', '-6.75'), ('Y', '-40.855'), ('A', '-89.873')]
[('N', '7303'), ('X', '-6.511'), ('Y', '-40.862'), ('A', '-89.926')]
[('N', '7304'), ('X', '-6.272'), ('Y', '-40.868'), ('A', '-89.979')]