我试图正则表达式查找列表中大于或等于.03的所有值。棘手的部分是我的值在9到15个小数位之间。
我当前的代码有些奏效,但是笨拙-任何建议都值得赞赏:
^(?: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])$
谢谢。
答案 0 :(得分:1)
您可以使用星号表示零个或多个数字:
^(?:0?\.\d[3-9]\d*)$
这具有额外的好处,即完全匹配0.03
或具有(例如)100个小数位的内容。
如果要严格限制小数位数,可以使用大括号语法,该语法匹配9到15位数字之间的任何重复:
^(?:0?\.\d[3-9]\d{9,15})$
请注意,按照书面规定,此正则表达式不匹配大于或等于0.03的任何内容-它匹配大于或等于0.03且小于1的任何内容,并且不匹配(例如0.1),即大于0.03。要匹配大于0.03的任何值,最好完全跳过正则表达式并解析数字。
答案 1 :(得分:0)
您应该将数据解析为float
:
从您的模式中,您似乎已经很好地分隔了数字-为什么要完全使用正则表达式?您的数字填满了整行或根本不匹配(r"^........$"
,因此本质上您具有:
t = """0.0000002
0.4
0.04
0.004
24544.23354
Also Bad"""
简单地分成几行,并检查每行是否为浮动
# 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)
输出:
Not ok: 0.0000002
0.4
0.04
Not ok: 0.004
24544.23354
Not ok: Also Bad
答案 2 :(得分:0)
您在这里:0.030000000-0.999999999999999
大于或等于.03且小于1.0
在小数点后9-15位
0?\.(?:03\d{7,13}|0[4-9]\d{7,13}|[1-9]\d{8,14})
扩展
# 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})