-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 lac。同样,我添加了 '[\s]' 以仅匹配那些在匹配价格之前有空格的价格。

输出:

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

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

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

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

另外,如何仅提取匹配的价格,不包括它之前和之后的空格?

谢谢。

4

1 回答 1

2

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

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

正则表达式演示

那将匹配:

  • \b字边界
  • \d+匹配一位或多位数字
  • \s*匹配零次或多次空白字符(或用于[ ]*匹配零次或多次空白。方括号不是必需的,但仅用于可读性)
  • (?:lac|crs?|k)匹配 lac、cr、crs 或 k 的交替
  • \b字边界
  • \.?匹配一个可选的点
于 2018-09-01T14:01:25.033 回答