亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 156 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號