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

时间:2018-09-01 13:19:33

标签: regex regex-lookarounds regex-group regex-greedy textmatching

我在下面的文本中使用正则表达式

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

答案 0 :(得分:2)

如果您要匹配价格,可以使用另一种匹配不同格式的价格。要确保前导数字和交替中的值不属于较长匹配项,可以使用word boundary \b。要同时匹配可选的点,可以添加\.?

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

Regex demo

那将匹配:

  • \b字边界
  • \d+匹配一个或多个数字
  • \s*匹配零个或多个空格字符(或使用[ ]*匹配零个或多个空格字符。方括号不是必需的,但仅出于可读性考虑)
  • (?:lac|crs?|k)匹配lac,cr,crs或k的替代
  • \b字边界
  • \.?匹配一个可选点