匹配閱讀文章的次數
import re
ret = re.search(r"\d+", "閱讀次數為 10887")
print(ret.group())
import re
ret = re.findall(r"\d+", "python = 8989, c = 3456, c++ = 78781")
print(ret)
#執行結果
['8989', '3456', '78781']
import re
ret = re.sub(r"\d+", '998', "python = 997")
print(ret)
# 執行結果
python = 998
import re
x = "\info:xiaozhang 33 shandong"
ret = re.split(r":| ", "info:xiaozhang 33 shandong")
print(ret)
python裡數量詞預設是貪婪的(在少數語言裡也可能是預設非貪婪),總是嘗試匹配盡可能多的字元;
非貪婪則相反,總是嘗試匹配盡可能少的字元。
在"*","?","+",""後面加上?,使貪婪變成非貪婪。
>>> s="this is a number 234-235-22-423"
>>> r=re.match(".+(\d+-\d+-\d+-\d+)",s)
>>> r.group(1)
'4-235-22-423'
>>> r=re.match(".+?(\d+-\d+-\d+-\d+)",s)
>>> r.group(1)
'234-235-22-423'
>>>
正規表示式模式中使用到通配字,那它在從左到右的順序求值時,會盡量「抓取」滿足匹配最長字串,在我們上面的例子裡面,「.+」會從字串的啟始處抓取滿足模式的最長字元,其中包括我們想得到的第乙個整型欄位的中的大部分,「\d+」只需一位字元就可以匹配,所以它匹配了數字「4」,而「.+」則匹配了從字串起始到這個第一位數字4之前的所有字元。
解決方式:非貪婪操作符「?」,這個操作符可以用在"*","+","?"的後面,要求正則匹配的越少越好。
>>> re.match(r"aa(\d+)","aa2343ddd").group(1)
'2343'
>>> re.match(r"aa(\d+?)","aa2343ddd").group(1)
'2'>>> re.match(r"aa(\d+)ddd","aa2343ddd").group(1)
'2343'
>>> re.match(r"aa(\d+?)ddd","aa2343ddd").group(1)
'2343'
>>>
與大多數程式語言相同,正規表示式裡使用"「作為轉義字元,這就可能造成反斜槓困擾。假如你需要匹配文字中的字元」",那麼使用程式語言表示的正規表示式裡將需要4個反斜槓"\":前兩個和後兩個分別用於在程式語言裡轉義成反斜槓,轉換成兩個反斜槓後再在正規表示式裡轉義成乙個反斜槓。
python裡的原生字串很好地解決了這個問題,有了原生字串,你再也不用擔心是不是漏寫了反斜槓,寫出來的表示式也更直觀。
>>> ret = re.match(r"c:\\a",mm).group()
>>> print(ret)
c:\a
re模組及其用法
一 re模組下的常用方法 首先在使用re模組之前,需要引入re模組 import re 1.findall 返回列表,找到所有的匹配項 ret re.findall d asda132eqwe啊阿達456 print ret 132 456 2.search 匹配從左到右第乙個符合,返回乙個變數,通...
re模組findall函式用法
本文件介紹了正規表示式元字元 和 re模組 findall 函式用法。給予正規表示式強大的功能和靈活性。表 示 法 描述正規表示式示例 符號literal 匹配文字字串的字面值literal foo.匹配任何字元 除了 n 之外 b.b 匹配字串起始部分 dear 匹配字串終止部分 bin sh 表...
re模組中group 與groups 用法
re模組中group 與groups 用法 自學python中一些小收穫和踩過的坑。標記下 先上案例1 group a 1,234 spam re.compile r d d re.search spam,a group re.search spam,a group 0 1,234 re.searc...