数字和百分比的正则表达式过滤器

问题描述 投票:0回答:2

数字和百分比的正则表达式过滤器

你好,

我再次向社区寻求帮助,以帮助我处理数字和百分比的正则表达式字符串,我有以下情况:

4.265%

23.392%

52.126%

172.373%

2452.182%

我需要创建 2 个正则表达式字符串,第一个过滤任何高于 20.000% 的百分比,第二个需要从 50.000% 开始过滤,我希望百分比过滤器变为无穷大,如果不可能我们可以工作范围高达 10000.000%

重要提示,不幸的是无法使用编程代码,我正在使用第三方平台执行此过滤并且它只支持正则表达式,所以除了使用正则表达式之外别无他法

再次感谢!

我对正则表达式没有很深的了解

regex
2个回答
1
投票

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

0
投票

首先,为了匹配百分比值,我有这个简单的正则表达式

^\d+(.\d+)?%$

此正则表达式将匹配任何数字(整数或浮点数)后跟

%
解释:

  • ^
    线锚开始
  • \d+
    匹配一个或尽可能多的数字
  • (.\d+)?
    匹配小数点和小数部分
    (.\d+)
    并且是可选的 (
    ?
    ),可以匹配
    12,345%
    或仅匹配
    12%
  • %
    匹配百分号
  • $
    行尾锚点

示例:Regex101

从那以后,我将进一步匹配比

20%
更高的百分比:

^[2-9]\d(.\d+)?%$|^[1-9]\d{2,}(.\d+)?%$

在这个正则表达式中,我有两个部分,由 OR 标记分隔

|

  1. 第一个
    ^[2-9]\d(.\d+)?%$
    匹配有 2 个数字的百分比,所以要匹配比
    20%
    更高的百分比,它从 [2-9] 的数字开始,然后是任何数字。
    • ^
      线锚开始
    • [2-9]
      匹配 2-9 范围内的一个数字
    • \d
      匹配单个数字
    • (.\d+)?
      匹配小数点和小数部分
      (.\d+)
      并且是可选的(
      ?
      )`
    • %
      匹配百分号
    • $
      行尾锚点
  2. 第二部分
    ^[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 为这种情况提供了一个完美的正则表达式.但我会发表我的努力,希望它能帮助你更多地了解正则表达式!

© www.soinside.com 2019 - 2024. All rights reserved.