代码之家  ›  专栏  ›  技术社区  ›  iamabhaykmr

使用regex匹配给定文本中的所有价格

  •  -1
  • iamabhaykmr  · 技术社区  · 7 年前

    我使用下面的正则表达式来处理下面的文本

    正则表达式: [\s](rs|price)?([\s.]*\d+[\s\d.]*)(pkg|k|(?:la(?:c|kh|k)|crore|cr)s?|l)[\s.]

    文本:

    65 lac this is 55 lac. and more price 100 lac. randome text to test price45 crs. and 65 cr and to test its matching rs 3244 k like rs 55k. to its matchibg 65 cr. but not 65 cr als not matching price 123 lac more of it 55 crs.

    它的价格与上面提到的不完全相符,但只有很少的。我匹配的价格前后有空格的价格正则表达式完全匹配。

    我补充说 [\s.] 最后以匹配价格而告终。后面有空格。例如55个crs。或24拉丁美洲。类似地,我添加了“[\s]”,以便只匹配那些在匹配价格之前有空格的价格。

    输出:

    https://regex101.com/r/iHamwk/1/

    示例输出2: https://regex101.com/r/h8NLhr/5

    示例输出3: https://regex101.com/r/h8NLhr/8

    又怎样才能提取出只排除前后空格的匹配价格呢?

    谢谢。

    1 回复  |  直到 7 年前
        1
  •  2
  •   The fourth bird    7 年前

    如果你想匹配价格,你可以使用替代品来匹配不同的格式。为了确保替换中的前导数字和值不是较长匹配的一部分,可以使用 word boundary \b . 也可以添加一个可选点 \.?

    \b\d+\s*(?:lac|crs?|k)\b\.?

    Regex demo

    符合以下条件:

    • \d+ 匹配一个或多个数字
    • \s* 零次或多次匹配空白字符(或使用 [ ]*
    • (?:lac|crs?|k) 与lac、cr、crs或k匹配的交替
    • \b类
    • \.?