找到一个正则表达式,其中包括数字,点和可能的字母和减号

时间:2016-04-06 16:16:08

标签: python regex xml xml-parsing

我有一个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; ?

3 个答案:

答案 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/