问题直截了当。我有一些数字,我尝试匹配0到110之间的数字。假设我们有五个数字:
99.9
108.712718
110
110.2
9
在这里,我需要匹配除第四个以外的所有字符。 我试了很多捕获组,正/负前瞻等。什么都不适合我。没有浮点数很容易,但是在这里我挣扎了很多。
P.S。我正在使用Python。
答案 0 :(得分:1)
类似的事情应该起作用:
(?<!\.)\b0*(?:(?:\d\d?|10\d)(?:\.\d+)?|110(?:\.0+)?)\b(?!\.\d)
(?<!\.)
的意思是“不带点(\.
)” \b
是边界一词0*
的意思是“前面有零个或多个0
” (\d\d?|10\d)
的意思是“一个数字后跟另一个可选数字(\d\d?
)或 10
后跟任何数字” (\.\d+)?
)110
,在点((?:\.0+)?
之后有一个或多个0 (?!\.\d)
,其意思是“不跟点和数字” 请参见here演示。
P.S。如果您要匹配整个字符串的对应关系,则负向前瞻和向后搜索是无用的。
答案 1 :(得分:0)
这必须分为三块。
1)110
2)100-109.9999999 ...
3)0-99.9999999 ...
模式:
^(?:(?:10[0-9]|[0-9][0-9]?)(?:\.[0-9]+)?|110)$
^
行首
(?:
启动非捕获组
(?:10[0-9]|[0-9][0-9]?)
捕获100-109或00-99
(?:\.[0-9]+)?
捕获小数点及其后的数字0或1次
|
或
110
从字面上捕获110
)
个非捕获组
$
行的结尾
简单。有什么问题吗
edit:事后,如果您不希望前导零(例如00、01、02等),可以将模式稍微更改为^(?:(?:10[0-9]|[1-9]?[0-9])(?:\.[0-9]+)?|110)$
,将更改为[1-9]?[0-9]
而不是{ {1}}