python筆記(2) 正規表示式
1
正規表示式在Python中最好以r'xx'
這樣的形式作為輸入,這能避免反斜槓()使用混亂。以r
開頭的字串,在python中是原始字串(raw string
)的意思。
特殊字元 | 解釋 | 例子 |
---|---|---|
. | 匹配所有字元不包括換行(如果DOTALL沒有設定的話) | |
^ | 匹配字串的開頭,在MULTILINE模式下匹配每行的開頭 | |
$ | 匹配字串的結尾,在MULTILINE模式下匹配每個新行的開頭 | |
* | 匹配0或者多個前置正規表示式 | |
+ | 匹配1或者多個前置正規表示式 | |
? | 匹配0或者1個前置正規表示式 | |
*?, +?, ?? | *,+,?都是貪婪的,加了?能改變著模式 | |
m | 匹配m個前置表示式 | |
{m,n} | 匹配m到n個前置表示式 | |
{m,n}? | 改變 {m,n}貪婪模式 | |
\ | 轉義特殊字元 | |
[] | 定義匹配集合,特殊字元(例如(+*) )在集合中失去特殊意義,使用-可以匹配一個序列,如果- 放在集合的開頭或者轉義就能匹配- ,^ 放在開頭可以翻轉整個匹配,匹配] 要麼放在開頭要麼轉義 |
|
豎線 | 或匹配 | |
(...) | 匹配括號中的字串,形成一個組(````) | |
(?:...) | 只匹配字串但是不記錄匹配的內容 | |
(?P<name>...) | 匹配之後形成一個組,組名為name | |
(?=...) | 超前匹配 | |
(?!...) | 超前不匹配 | |
(?<=...) | 滯後匹配 | |
(?<!...) | 滯後不匹配 | |
\number | 引用一個組 | |
\A | 字串的開頭匹配 | |
\b | 匹配空字元,在開始和結束處 | |
\B | 匹配空字元,不在開始和結束處 | |
\d | 匹配數字0-9 | |
\D | 匹配非數字 | |
\s | 匹配空字元,相當於[ \t\n\r\f\v] | |
\S | 與\s相反 | |
\w | [a-zA-Z0-9_] | |
\W | 與\w相反 | |
\Z | 匹配字串的結尾 | |
\u | Unicode字元 |
貪婪模式
正規表示式預設的情況是貪婪的,所謂貪婪就是儘量多匹配也可以叫最長匹配,但是有時候這又是不合適的.
2
正規表示式的使用,可以先編譯正規表示式然後呼叫方法,也可以直接從re模組呼叫方法。
pattern = re.compile(r'dongge')
m = pattern.match('dongge zeus')
#或者
m = re.match(r'dongge','dongge zeus')
match
,search
,fullmatch
這三個函式返回值都是match物件,match
從頭開始匹配,fullmatch
匹配整個,search
匹配第一個。
import re
test_str = 'abcd 1234 dongge'
pattern = re.compile(r'1234')
pattern.match(test_str)
pattern.search(test_str)
<_sre.SRE_Match object; span=(5, 9), match='1234'>
pattern.fullmatch(test_str)
p1 = re.compile(r'abcd')
p1.match(test_str)
<_sre.SRE_Match object; span=(0, 4), match='abcd'>
p1.search(test_str)
<_sre.SRE_Match object; span=(0, 4), match='abcd'>
p1.fullmatch(test_str)
p1.fullmatch(test_str,0,4)
<_sre.SRE_Match object; span=(0, 4), match='abcd'>
(注:上面的程式碼來自jupyter notebook)
split findall finditer
這三個函式都返回一個列表。
- 分割字串
split
re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
注意程式碼中的第三行,在正規表示式中加了分組之後,那個分割元素也成了返回值。
- 查詢所有匹配的元素
findall
test_str = 'dongge , dongge ,zeus'
re.findall(r'dongge',test_str)
['dongge', 'dongge']
- 迭代查詢元素
finditer
sub subn
sub(pattern, repl, string, count=0, flags=0)
這兩個函式有查詢和替換功能,repl
這個引數既可以是字串也可以是一個函式,函式接收一個match object
。
3
Match Object
這在上面多次提到,如果一個函式返回這個物件,那麼判斷值肯定就是True
。
這個物件最重要的概念就是group,相關函式作用在下面截圖中。
-
start([group])
end([group])
span([group])
這裡三個函式都是用來計算group的位置,span返回的一個元組(start,end),group預設值是0。
相關文章
- 正規表示式(筆記)筆記
- Python學習筆記 - 正規表示式Python筆記
- Python筆記五之正規表示式Python筆記
- 正規表示式速查筆記筆記
- 正規表示式筆記(四)筆記
- 正規表示式筆記(三)筆記
- 正規表示式筆記(二)筆記
- 正規表示式筆記(一)筆記
- Python下正規表示式學習筆記Python筆記
- JDK6筆記(4)—-正規表示式2JDK筆記
- Python學習筆記|Python之正規表示式Python筆記
- 正規表示式學習筆記筆記
- JS筆記(15): 正規表示式JS筆記
- 7,正規表示式(perl筆記)筆記
- python 中的正規表示式學習筆記Python筆記
- Python 正規表示式 re 模組簡明筆記Python筆記
- JavaScript正規表示式迷你書-筆記JavaScript筆記
- Ruby學習筆記-正規表示式筆記
- 正規表示式學習筆記一筆記
- PERL學習筆記---正規表示式筆記
- 正規表示式學習筆記 (轉)筆記
- Python——正規表示式Python
- Python 正規表示式Python
- Python:正規表示式Python
- python正規表示式Python
- JavaScript正規表示式學習筆記(一)JavaScript筆記
- 最容易理解的正規表示式筆記筆記
- apache url rewrite及正規表示式筆記Apache筆記
- JDK6筆記(3)—-正規表示式JDK筆記
- JavaScript正規表示式(2)JavaScript
- oracle 正規表示式2Oracle
- python爬蟲學習筆記4-正規表示式Python爬蟲筆記
- 正規表示式學習筆記(1)-認識正則筆記
- js加固之正規表示式學習筆記JS筆記
- 學習筆記-5.1.正規表示式1筆記
- Python語法進階(2)- 正規表示式Python
- Python正規表示式手稿Python
- python之正規表示式Python