我有一个txt文件,其中包含以下行:
<KEY key="Metric" keyvalue="VALUE (Base)">523.876481542546</KEY>
<KEY key="Metric" keyvalue="VALUE (Base)">1.41186111749407E-05</KEY>
我想使用正则表达式从上面提取数字。这些数字可能包括科学记数法,例如1.41186111749407E-05。 到目前为止,我已经尝试过(在我的python脚本中):
count = 0
for i, line in enumerate(searchlines):
if '"VALUE (Base)">' in line:
for line in searchlines[i:i+1]:
m = re.search(r'\d+\.\d+', line)
count = count + 1
if count == 1:
m1 = m.group()
if count == 2:
m2 = m.group()
这给出了输出:
m1 = 523.876481542546
m2 = 1.41186111749407
但我想:
m2 = 1.41186111749407E-05
使用&#39; E&#39;处理案件需要的正则表达式是什么?和减号&#39; - &#39; ?
答案 0 :(得分:2)
为什么不将 XML解析器用于XML数据。例如,Python标准库中的xml.etree.ElementTree
:
$ cat input.xml
<KEYS>
<KEY key="Metric" keyvalue="VALUE (Base)">523.876481542546</KEY>
<KEY key="Metric" keyvalue="VALUE (Base)">1.41186111749407E-05</KEY>
</KEYS>
>>> import xml.etree.ElementTree as ET
>>> tree = ET.parse("input.xml")
>>> [key.text for key in tree.findall("KEY")]
['523.876481542546', '1.41186111749407E-05']
答案 1 :(得分:0)
这将使标记中的所有内容以数字开头并具有小数。
import re
REGEX = re.compile("^<.*?>(\d*\..*)<.*?>$")
如果你有没有小数的数字
import re
REGEX = re.compile("^<.*?>(\d*|\d*\..*)<.*?>$")
答案 2 :(得分:0)
我认为如果你使用re string
re.search("\d+\.*\d*[E]*[-]*\d*",line)
应该对具有小数的数字和没有小数的数字
你总是可以使用像这样的正则表达式测试器测试你的正则表达式:http://pythex.org/