数字和百分比的正则表达式过滤器
你好,
我再次向社区寻求帮助,以帮助我处理数字和百分比的正则表达式字符串,我有以下情况:
4.265%
23.392%
52.126%
172.373%
2452.182%
我需要创建 2 个正则表达式字符串,第一个过滤任何高于 20.000% 的百分比,第二个需要从 50.000% 开始过滤,我希望百分比过滤器变为无穷大,如果不可能我们可以工作范围高达 10000.000%
重要提示,不幸的是无法使用编程代码,我正在使用第三方平台执行此过滤并且它只支持正则表达式,所以除了使用正则表达式之外别无他法
再次感谢!
我对正则表达式没有很深的了解
ECMAScript(试试):
^ # Beginning of string/line
(?: # Non-capturing group consists of
[2-9]\d # a digit from 2 to 9 followed by another digit
| # or
[1-9]\d{2,} # a digit from 1 to 9 followed by 2 or more digits
) #
(?:\.\d+)? # followed by a dot and 1 or more digits, optionally.
(?<! # Assure that what we caught
^20 # does not start with 20
(?:\.0+)? # followed by a dot and 1 or more zeroes, optionally.
) #
% # Literal '%'
$ # End of line/string
PCRE2(试试):
^ # Beginning of string/line
(?: #
20 # Literal '20', followed by
\.0*[1-9]\d* # a dot, 0 or more zeroes, a digit from 1 to 9 and 0 or more digits
| # or
(?: #
2[1-9] # 21 to 29
| # or
[3-9]\d # 30 to 99
| # or
[1-9]\d{2,} # 100 to infinity
) #
(?:\.\d+)? # followed by a dot and 1 or more digits, optionally
) #
% # Literal '%'
$ # End of line/string
首先,为了匹配百分比值,我有这个简单的正则表达式
^\d+(.\d+)?%$
此正则表达式将匹配任何数字(整数或浮点数)后跟
%
解释:
^
线锚开始\d+
匹配一个或尽可能多的数字(.\d+)?
匹配小数点和小数部分 (.\d+)
并且是可选的 (?
),可以匹配 12,345%
或仅匹配 12%
%
匹配百分号$
行尾锚点示例:Regex101
从那以后,我将进一步匹配比
20%
更高的百分比:
^[2-9]\d(.\d+)?%$|^[1-9]\d{2,}(.\d+)?%$
在这个正则表达式中,我有两个部分,由 OR 标记分隔
|
:
^[2-9]\d(.\d+)?%$
匹配有 2 个数字的百分比,所以要匹配比 20%
更高的百分比,它从 [2-9] 的数字开始,然后是任何数字。
^
线锚开始[2-9]
匹配 2-9 范围内的一个数字\d
匹配单个数字(.\d+)?
匹配小数点和小数部分(.\d+)
并且是可选的(?
)`%
匹配百分号$
行尾锚点^[1-9]\d{2,}(.\d+)?%
将匹配至少有 3 位数字的百分比值,因此它必须以 [1-9] 开头,后跟 2 位或更多位数字:
^
线锚开始[1-9]
匹配 1-9 范围内的一个数字\d{2,}
匹配两个或更多数字(.\d+)?
匹配小数点和小数部分(.\d+)
并且是可选的(?
)`%
匹配百分号$
行尾锚点示例:Regex101
所以要匹配高于 50% 的值,只需将
2
更改为 5
^[5-9]\d(.\d+)?%$|^[1-9]\d{2,}(.\d+)?%$
注意: 从这一点上我意识到我误解了 OP 的条件,我虽然它会匹配值更高或相等,所以我的正则表达式不会在匹配只有更高值的情况下工作,@InSync 为这种情况提供了一个完美的正则表达式.但我会发表我的努力,希望它能帮助你更多地了解正则表达式!