使用正则表达式匹配给出文本中的所有类型的价格

问题描述 投票:-1回答:1

我正在使用以下正则表达式来跟随下面的文本

正则表达式:[\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

我该如何修改上面的正则表达式?

另外如何提取匹配价格只排除前后空格?

谢谢。

regex regex-lookarounds regex-group regex-greedy textmatching
1个回答
2
投票

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

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

Regex demo

这将匹配:

  • \b字边界
  • \d+匹配一个或多个数字
  • \s*匹配空白字符的零次或多次(或使用[ ]*匹配空白的零次或多次。方括号不是必需的,但这些只是为了可读性)
  • (?:lac|crs?|k)与lac,cr,crs或k匹配的交替
  • \b字边界
  • \.?匹配一个可选的点
© www.soinside.com 2019 - 2024. All rights reserved.