Python使用正则表达式匹配实数/浮点数

时间:2013-11-29 18:27:53

标签: python regex

我不是最好的。

有人能告诉我这个模式是否可以在文字出现之前返回单个出现的整数或十进制数,“每个”?每个数字和字符串将由一个空格分隔。

for each in parsed:
            if measure_string.find(each)>-1:
                r = re.compile("([0-9]\.?[0-9]?) "+each)
                b = re.match(r,measure_string)
                if b:
                    return b, each

谢谢你看看。

4 个答案:

答案 0 :(得分:2)

[0-9]\.?[0-9]?

第一个[0-9]将匹配一次数字。 。?将匹配0-1个周期 [0-9]?将匹配0-1位。

因此,你的正则表达式将解析1,11,1.1,但不会解析1.11或11.1

如果你想解析以上所有内容,我建议如下。

([0-9]+(?:\.[0-9]+)?)(?:\s)

[0-9] + - 匹配1位或更多位数
\。 - 比赛1期间
[0-9] *? - 匹配所有剩余数字 ()? - 输入此正则表达式0或1次。

将捕获括号内的任何内容。如果你看到(?:...)中包含一个正则表达式,它是一个非捕获正则表达式。但如果(?...)被包含在(...)中,它将被(...)正则表达式捕获......它有点混乱。但是上面应该只捕获数字而不是空间。

答案 1 :(得分:1)

实数有更精确的正则表达式:

"^[-+]?[0-9]*\.?[0-9]+(e[-+]?[0-9]+)?$"

检查一下这个正则表达式:

realnum=re.compile("^[-+]?[0-9]*\.?[0-9]+(e[-+]?[0-9]+)?$")

["yes" if realnum.match(test) else "no" for test in ["12", "+12", "-12", "-3.14", ".314e1", "+.01e-12", "+22.134e+2"]]
['yes', 'yes', 'yes', 'yes', 'yes', 'yes', 'yes']

["yes" if realnum.match(test) else "no" for test in ["..12", "+-12", "-12.", "-3.14p", ".314e1.9", "+. 01e-12", "+22.134e"]]
['no', 'no', 'no', 'no', 'no', 'no', 'no']

答案 2 :(得分:0)

这样做:

import re
def parse(measure_string,each):
    r = re.compile(r"\d+(\.\d*)?(?=\s"+each+")")
    b = re.match(r, measure_string)
    if(b):
        return b.group(0)

我们正在使用一个正面的向前看?=为了匹配浮点数,只有当它后面跟着空格和字符串each时,才能在匹配中不包含那个空格和each。 然后,我们根据ref返回匹配的字符串MatchObject.group(0)

答案 3 :(得分:0)

尝试:

\b(([1-9][0-9]*)?[0-9]\.[0-9]+)\b

匹配实数和

\b(([1-9][0-9]*)?[0-9])\b

匹配简单。

测试正则表达式的好地方:http://www.regexr.com/