爬蟲前提——正則表達式語法以及在Python中的使用

正則表達式是用來處理字符串的強大工具,他並非某種編程雲。python

正則表達式擁有獨立的承受力引擎,無論什麼編程語言,正則表達式的語法都是同樣的。正則表達式

 

正則表達式的匹配過程編程

1.一次拿出表達式和文本中的字符比較。編程語言

2.若是每個字符都能匹配,則匹配成功;一旦有匹配不成功的字符則匹配失敗。工具

3.若是表達式中有兩次或便捷,這個過程會稍微有一些不一樣。spa

 

下面舉例一些符號對象

[....] blog

字符集(字符類)。對應的位置能夠是字符集中任意字符。字符集中的字符能夠豬哥列出,也能夠給出範圍,如[abc]或[a-c]。第一個字符若是是^則表示取反,若是[^abc]表示不是abc的其餘字符。全部的特殊字符在字符集中都是去某原有的特殊含義。在字符集中若是是用]、-或^,能夠在前面加上轉移字符反斜槓\,或把]、-放在第一個字符,把^放在非第一個字符。字符串

預約義字符集(能夠寫在字符集[....]中):編譯器

\d  數字:[0-9]

\D  非數字:[^\d]

\s  空白符:[<空格>\t\r\n\f\v]

\S  非空白符:[^\s]

\w  單詞字符:[A-Za-z0-9_]

\W  飛單詞字符:[^\w]

數量詞(用在字符或(...)以後)

*  匹配前一個字符0或無限次

+  匹配前一個次1次或無限次

?  匹配前一個次0次或1次

{m}  匹配前一個字符m次

{m,n}  匹配前一個字符m至n次(多於n次則失敗)

    m和n能夠省略:若省略m,則匹配0至n次;若省略n,則匹配m至無限次

邊界匹配(不消耗待匹配字符串中的字符)

^  匹配字符串開頭。在多行模式中匹配每一行的開頭。

$  匹配字符串末尾。在多行模時匹配每一行的末尾。

\A  僅匹配字符串開頭。

\Z  僅匹配字符串末尾。

\b  匹配\w和\W之間

\B  [^\B]

邏輯、分組:

|  表明左右表達式任意匹配一個。(類比於C語言的或語句,它老是先匹配左邊的表達式,一旦成功匹配則跳過匹配右邊的表達式。若是|沒有被包括在()中,則它的範圍是整個正則表達式。)

(...)  被括起來的表達式將做爲分組,從表達式左邊開始沒遇到一個分組的左括號'(',編號+1.另外,分數表達式做爲一個總體,能夠后街數量詞。表達式中僅在該組中有效。

(?P<name>...)  分組,除了原有的編號外再指定一個額外的別名。

\<number>  引用編號爲<number>分組匹配到的字符串。

(?P=name)  引用別名爲<name>的分組匹配到的字符串。

特殊構造(不做爲分組):

(?:...)  (...)的不分組版本,用於食用'|'或後接數量詞。

(?iLmsux)  iLmsux的每一個字符表明一個匹配模式,只能用在正則表達式的開頭,可選多個。

(?#...)  #後的內容將做爲註釋被忽略。

(?=...)  以後的字符串內容須要匹配表達式才能成功匹配。不消耗字符串內容。

(?!...)  以後的字符串內容須要不匹配表達式才能成功匹配。不消耗字符串。

(?<=...)  以前的字符串內容須要匹配表達式才能成功匹配。不消耗字符串內容。

(?<!...)  以前的字符串內容須要不匹配表達式才能成功匹配。不消耗字符串內容。

(?(id/name)yes-pattern|no-pattern)  若是編號爲id/別名爲name的組匹配到字符串,則須要匹配yes-pattern,不然須要匹配no-=attern。[no-pattern]可省略。

 

數量詞的貪婪模式與非貪婪模式

正則表達式一般用於在文本中查找匹配的字符串。

貪婪模式:老是嘗試撇皮儘量多的字符;(Python裏數量詞默認是貪婪的)

非貪婪模式:老是嘗試匹配儘量少的字符。(在貪婪模式的*或+後加上?,就變成了非貪婪模式)

 

python中如何使用正則表達式

python中是經過一個叫"re"的包來支持正則表達式。

結果以下:

咱們來分析一下pattern = re.compile(r'\d+\.\d*') 這個語句:

\d表示數字[0-9]

+表示重複出現上一次匹配的1次或n次

\.表示字符‘.’

*表示重複出現上一次匹配的0次或n次

r其實是python告訴編譯器這個字符串中的所有轉義字符失效,按照原始字符串處理。

 

因此\d+.\d*其實是表示匹配一些小數的規則。然而這個表達式並不能正確匹配全部的小數,好比'0.'這樣的字符也會被匹配,舉這個例子純粹是爲了多講幾個符號。

 

因爲咱們已經創建好了一個可以匹配'\d+.\d*'規則的pattern對象。

經過pattern的findall方法就可以匹配到咱們想要的字符串。

返回的是一個字符串列表[]。

相關文章
相關標籤/搜索