为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

料青山看我应如是 2021-06-04 21:47:38
我正在从 regex 中提取此文本,我在文本中匹配了所需的字符串,但是在使用 python re 提取那些匹配的文本时,它没有提取 .这是我正在使用的代码。import rePRICE = '\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 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

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


价格 = 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,如换行符、退格符或\x42forB都被处理。然后将结果字符串传递给re解释自己转义的模块。因此,在 99.9% 的情况下,您希望避免编译器解释转义。原始字符串就是这样做的。


regex101 站点假定您使用的是原始字符串文字。


查看完整回答
反对 回复 2021-06-09
  • 1 回答
  • 0 关注
  • 132 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信