正則表達式
正則的用處:python的網(wǎng)頁爬蟲中用的相當(dāng)多
寫正則表達式的整體思路:
首先把你要匹配的字符串粘過來,然后把里面共性的東西留著,空格換成\s,其他的可變字符串替換成各種匹配,然后那些不變的部分留著就行了。
pattern
| 元字符 | 說明 |
|---|---|
| . | 所有 |
| \b | begin,匹配單詞開始 |
| ^ | 匹配一行的開始 |
| $ | 匹配一行的結(jié)束 |
| \d | digital,數(shù)字 |
| \w | word,匹配數(shù)字字母下劃線漢字,什么都能匹配 |
| \s | 匹配空格 |
| \ | 轉(zhuǎn)義符 .*\ 這些用 |
.匹配任意
字符集:[12] 中括號是字符集,匹配中括號中任意字符中的一個,這個表達式匹配1或者2,只匹配一個
[0-9]就相當(dāng)于\d
這個[]這里還要多寫一點,因為[]里面無限裝東西,而含義就是這個字符集相當(dāng)于里面裝的所有東西的其中一種,就有一個或的意思在里面。如果是兩個表達式來取或的話,就用|。
次數(shù):
*0或多個
+至少一個
數(shù)量詞:[0-9]{4},匹配四位數(shù),大括號套起來就是次數(shù)
[0-9]{4,6}這個是貪婪匹配,比如要被匹配的字符串一共就六個數(shù)字,那這肯定就都匹配了,先從上限開始找
[0-9]{4,6}?這個等同于[0-9]{4},后面帶了一個問號之后,就不敢多要了,大括號成了廢話。
分組()
分組是括號,只要看見括號,而且這個括號前面還沒有轉(zhuǎn)義符的話,且括號后面跟的是大括號,比如
([1-9].){3}
這種小括號大括號連著用的結(jié)構(gòu),相當(dāng)方便斷句啊!
分組的別名
如果分組太多,不命名不好調(diào)用。問號尖括號連用,外面用小括號包著,只要看見這個小括號跑不了就是分組,例如:
(?<name1>([1-9].){3})
(?<name1> exp )
如果尖括號前面不帶問號的話,這個<>本身就不構(gòu)成語法。
分組這個東西,有了括號之后,就方便把這個組的取值拉出來,(?<> xxxx)這種表達式,把問號尖括號去掉之后,其他的仍然是一個正常的正則分組。
分組表達式取反
分組取反
問號冒號連用
(?: exp),(?:([1-9].){3})
這個取到的是上面這個表達式?jīng)]匹配到的部分,問號冒號連用沒法命名
貪婪匹配與懶惰匹配
貪婪比如 .*1,*就是貪婪,流星碎片,盡可能多的去匹配
懶惰 .*?1,?就是懶惰,盡可能少的去匹配
這兩個中,都是匹配xxxxx1,不過第一個要匹配到最后一個1,第二個到第一個1就停了。
(問號, 表示一點貪婪之后???)