【问题标题】:Regex for measuraments unit on both sides of the value (200 g/g 200)值两侧的测量单位的正则表达式 (200 g/g 200)
【发布时间】:2021-11-10 22:48:09
【问题描述】:

考虑到单位可以在数字之前或之后,我正在尝试编写一个正则表达式来捕获字符串中的任何度量单位。

我现在想到的是两个正则表达式。

/\d*\.?,?\d+\s?(kg|g|l)/gi 匹配

ABC 200g
EFG 5,4 Kg
HIL 2x20l

与匹配的(kg|g|l)\s?\d+,?\.?d*

ABC g200
EFG kg 5,4
HIL l 20x2

如何加入这两个正则表达式以匹配两者:

ABC g200
EFG 5,4 Kg

【问题讨论】:

    标签: regex units-of-measurement


    【解决方案1】:

    使用您显示的示例,请尝试以下正则表达式。

    (?:(?:(?:\d+)g|(?:g\d+))|(?:(?:l\s*\d+)|(?:\d+\s*l))|(?:(?:\d+,\d+\s*Kg)|(?:kg\s*\d+,\d+)))
    

    Online demo for above regex

    说明:为上述添加详细说明。

    (?:                                     ##Starting 1st capturing group from here.
      (?:                                   ##Starting 2nd capturing group from here.
         (?:\d+)g|(?:g\d+)                  ##Matching either digits followed by g OR g followed by digits(both conditions in non-capturing groups here).
      )                                     ##Closing 2nd capturing group here.
      |                                     ##Putting OR condition here.
      (?:                                   ##Starting 3rd capturing group here.
         (?:l\s*\d+)|(?:\d+\s*l)            ##Matching eiter l followed by 0 or more spaces followed by digits OR digits followed by 0 or more spaces followed by l.
      )                                     ##Closing 3rd capturing group here.
      |                                     ##Putting OR condition here.
      (?:                                   ##Starting 4th capturing group here.
         (?:\d+,\d+\s*Kg)|(?:kg\s*\d+,\d+)  ##Checking either digits followed by comma digits spaces Kg OR kg spaces digits comma digits here.
      )                                     ##Closing 4th capturing group here.
    )                                       ##Closing 1st capturing group here.
    

    【讨论】:

      【解决方案2】:

      对于不区分大小写的模式,匹配可选的 kgl 和替代的 | 以同样匹配模式。

      可选的点和逗号可以在字符类[.,]? 中,否则.?,? 也可以同时匹配.,

      单词边界\b 防止单元后出现部分匹配。

      \d*[.,]?\d+\s*(?:k?g|l)\b|\b(?:k?g|l)\s*\d*[.,]?\d+
      

      Regex demo

      【讨论】:

        猜你喜欢
        • 2015-08-30
        • 1970-01-01
        • 1970-01-01
        • 2014-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-03
        • 1970-01-01
        相关资源
        最近更新 更多