用正则表达式匹配float的Python错误

时间:2015-08-11 00:48:47

标签: python regex

我有这些数据:

1.2 GHz___(528)
1.3 GHz___(417)
1.4 GHz___(102)
1.5 GHz___(174)
1.6 GHz___(30)

528 MHz___(66)
533 MHz___(9)
550 MHz___(3)
600 MHz___(87)
624 MHz___(6)

我有这个正则表达式:

(\d{1,4})((,|.)(\d{1,2})){0,1}

它适用于Mhz值,但遗憾的是它对Ghz值不起作用:

这是我得到的输出,我无法理解错误:

1.2.2 
1.3.3 
1.4.4
1.5.5
1.6.6
528
533
550
600
624

我想要的输出是:

1.2
1.3
1.4
1.5
1.6
528
533
550
600
624

3 个答案:

答案 0 :(得分:3)

为什么不在每一行上获得第一个以空格分隔的值?

CollapsingToolbarLayout

如果你真的想要一个正则表达式,你可以这样做:

def parse_data(data):
    for line in data:
        if line:
            yield line.split()[0]

data = """
1.2 GHz___(528)
1.3 GHz___(417)
1.4 GHz___(102)
1.5 GHz___(174)
1.6 GHz___(30)

528 MHz___(66)
533 MHz___(9)
550 MHz___(3)
600 MHz___(87)
624 MHz___(6)"""

numbers = list(parse_data(data.splitlines()))

print(numbers)

答案 1 :(得分:0)

使用此模式

^(\d+(?:[,.]\d+)?)

Demo

答案 2 :(得分:0)

您可以使用此模式获取所有数值(+ ve,-ve,float,int):

(?P<value>[-+]?[0-9]*[.]?[0-9]+|[0-9]+)