我正在尝试正则表达式查找列表中所有大于或等于.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])$谢谢。
发布于 2019-03-28 06:15:42
您可以使用星号表示零个或多个数字:
^(?:0?\.\d[3-9]\d*)$这有一个额外的好处,那就是精确匹配0.03或小数点后100位的内容。
如果您想严格控制小数位数,可以使用花括号语法,它可以匹配9到15位之间的任何重复项:
^(?:0?\.\d[3-9]\d{9,15})$注意,如前所述,此正则表达式不匹配大于或等于0.03的任何值--它匹配大于或等于0.03且小于1的值,也不匹配大于0.03的0.1。要匹配任何大于0.03的值,最好完全跳过正则表达式并解析数字。
发布于 2019-03-28 06:17:47
您只需将数据解析为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发布于 2019-03-28 07:38:48
给你: 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})
https://stackoverflow.com/questions/55387195
复制相似问题