首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex:查找大于特定值的数字(具有不同的小数长度)

Regex:查找大于特定值的数字(具有不同的小数长度)
EN

Stack Overflow用户
提问于 2019-03-28 06:05:53
回答 3查看 110关注 0票数 3

我正在尝试正则表达式查找列表中所有大于或等于.03的值。棘手的部分是我的值有9到15位小数。

我现在的代码有点用,但很笨拙--非常感谢的任何建议:

代码语言:javascript
复制
^(?:0?\.[0-9][3-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|0?\.[0-9][3-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|0?\.[0-9][3-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9])$

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2019-03-28 06:15:42

您可以使用星号表示零个或多个数字:

代码语言:javascript
复制
^(?:0?\.\d[3-9]\d*)$

这有一个额外的好处,那就是精确匹配0.03或小数点后100位的内容。

如果您想严格控制小数位数,可以使用花括号语法,它可以匹配9到15位之间的任何重复项:

代码语言:javascript
复制
^(?:0?\.\d[3-9]\d{9,15})$

注意,如前所述,此正则表达式不匹配大于或等于0.03的任何值--它匹配大于或等于0.03且小于1的值,也不匹配大于0.03的0.1。要匹配任何大于0.03的值,最好完全跳过正则表达式并解析数字。

票数 1
EN

Stack Overflow用户

发布于 2019-03-28 06:17:47

您只需将数据解析为float

从您的模式来看,您似乎已经很好地分离了数字-为什么要使用正则表达式呢?您的数字填满了整行,或者根本不匹配( r"^........$",因此本质上您有:

代码语言:javascript
复制
t = """0.0000002
0.4
0.04
0.004
24544.23354
Also Bad"""

只需将行拆分成行,并将每行检查为浮动

代码语言:javascript
复制
# splits the string into a list of lines
for line in (x.strip() for x in t.split("\n")):
    try:
        if float(line) >= 0.03:
            print(line)
        else: 
            print("Not ok:",line)
    except:
        print("Not ok:",line)

输出:

代码语言:javascript
复制
Not ok: 0.0000002
0.4
0.04
Not ok: 0.004
24544.23354
Not ok: Also Bad
票数 0
EN

Stack Overflow用户

发布于 2019-03-28 07:38:48

给你: 0.030000000 - 0.999999999999999

大于等于.03且小于1.0

9-15位小数的

代码语言:javascript
复制
0?\.(?:03\d{7,13}|0[4-9]\d{7,13}|[1-9]\d{8,14})

扩展

代码语言:javascript
复制
 #  0.030000000  -  0.999999999999999
 0?
 \.
 (?:
      03 \d{7,13} 
   |  0 [4-9] \d{7,13} 
   |  [1-9] \d{8,14} 
 )

注意-这是机器生成的,可能会有一些重叠。

示例:0?\.(?:0[3-9]\d{7,13}|[1-9]\d{8,14})

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55387195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档