我在下面的文本中使用正则表达式
正则表达式:[\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
如何修改上述正则表达式?
还如何仅在匹配价格之前和之后排除空格来提取匹配价格?
谢谢。
答案 0 :(得分:2)
如果您要匹配价格,可以使用另一种匹配不同格式的价格。要确保前导数字和交替中的值不属于较长匹配项,可以使用word boundary \b
。要同时匹配可选的点,可以添加\.?
\b\d+\s*(?:lac|crs?|k)\b\.?
那将匹配:
\b
字边界\d+
匹配一个或多个数字\s*
匹配零个或多个空格字符(或使用[ ]*
匹配零个或多个空格字符。方括号不是必需的,但仅出于可读性考虑)(?:lac|crs?|k)
匹配lac,cr,crs或k的替代\b
字边界\.?
匹配一个可选点