Python在使用边界时不基于正则表达式提取匹配的文本

时间:2018-09-03 06:54:45

标签: python regex regex-group

我正在提取this text from regex,我在文本中匹配了所需的字符串,但是在使用python re提取那些匹配的文本时,它没有提取。

这是我正在使用的代码。

import re
PRICE = '\b(price|rs)?\s*(\d+[\s\d.]*\s*?(pkg|k|m| 
(?:la(?:c|kh|k)|crore|cr)s?|l)\b\.?)'

content ='This should matchprice  5.6 lacincluding price(i.e  price 
5.6 lac) and rs 56 m. including rs (i.e rs 56 k  rs 56 m) .

It will match normally if there is no price or rs written for example 
or   56 k or 8.8 crs. are correct matching.

It should not match5.6  lac (Should not match eitherrs 6 lac asas 
there is no spaces before 5.6'

for m in re.finditer(PRICE,content,pat.FLAG):
    matched = m.group().strip()
    print ("In matched "+ matched)`

以上代码不在for循环内。任何线索都表示赞赏。谢谢。

1 个答案:

答案 0 :(得分:3)

使用原始字符串定义正则表达式:

PRICE = r'\b(price|rs)?\s*(\d+[\s\d.]*\s*?(pkg|k|m|(?:la(?:c|kh|k)|crore|cr)s?|l)\b\.?)'

否则,\b被解释为退格键:

>>> print '\b(price|rs)?\s*(\d+[\s\d.]*\s*?(pkg|k|m|(?:la(?:c|kh|k)|crore|cr)s?|l)\b\.?)'
(price|rs)?\s*(\d+[\s\d.]*\s*?(pkg|k|m|(?:la(?:c|kh|k)|crore|cr)s?|l\.?)
>>> print r'\b(price|rs)?\s*(\d+[\s\d.]*\s*?(pkg|k|m|(?:la(?:c|kh|k)|crore|cr)s?|l)\b\.?)'
\b(price|rs)?\s*(\d+[\s\d.]*\s*?(pkg|k|m|(?:la(?:c|kh|k)|crore|cr)s?|l)\b\.?)

请注意第一个print输出如何不包含初始的\b。请记住,该字符串首先由python编译器解释,这意味着将处理所有常见的转义,例如\n代表换行符或\b代表退格键或\x42代表B。然后将所得的字符串传递到re模块,该模块解释其自身的转义符。因此,在99.9%的情况下,您要避免编译器解释转义。原始字符串就是这样做的。

regex101网站假定您正在使用原始字符串文字。