-
1 # DIY電子愛好者
-
2 # 一同匠善
正則表示式是一個強大的字串處理工具方法,關於字串的操作絕大部分都可以使用正則表示式來解決,爬蟲工作者更為重要,每天和字串打交道,正則表示式更是不可或缺的技能,正則表示式的在不同的語言中使用方式可能不一樣,不過只要學會了任意一門語言的正則表示式用法,其他語言中大部分也只是換了個函式的名稱而已,本質都是一樣的。
分享一下我學習正則表示式的參考資料連結: https://www.runoob.com/python/python-reg-expressions.html
下面,我來介紹一下python中的正則表示式是怎麼應用的
一.python中的正則表示式大致分為:
1.1. 元字元
1.2. 模式
1.3. 函式
1.4. re 內建物件用法
1.5. 分組用法
1.6. 環視用法
二.所有關於正則表示式的操作都使用 python 標準庫中的 re 模組
小例子:
import re
s1 = "hello World!"
regex = re.compile(s1, re.I)
print regex.match(s).group()
三.函式
簡單分享一下三個函式match search compile,可以見下面圖
四.分享一個找到的筆記例項
正則表示式例項:
#!/usr/bin/python
import re
line = "Cats are smarter than dogs"
matchObj = re.match( r"(.*) are (.*?) .*", line, re.M|re.I)
if matchObj:
print "matchObj.group() : ", matchObj.group()
print "matchObj.group(1) : ", matchObj.group(1)
print "matchObj.group(2) : ", matchObj.group(2)
else:
print "No match!!"
正則表示式:
r"(.*) are (.*?) .*"
解析:
首先,這是一個字串,前面的一個 r 表示字串為非轉義的原始字串,讓編譯器忽略反斜槓,也就是忽略跳脫字元。但是這個字串裡沒有反斜槓,所以這個 r 可有可無。
(.*) 第一個匹配分組,.* 代表匹配除換行符之外的所有字元。
(.*?) 第二個匹配分組,.*? 後面多個問號,代表非貪婪模式,也就是說只匹配符合條件的最少字元
後面的一個 .* 沒有括號包圍,所以不是分組,匹配效果和第一個一樣,但是不計入匹配結果中。
matchObj.group() 等同於 matchObj.group(0),表示匹配到的完整文字字元
matchObj.group(1) 得到第一組匹配結果,也就是(.*)匹配到的
matchObj.group(2) 得到第二組匹配結果,也就是(.*?)匹配到的
因為只有匹配結果中只有兩組,所以如果填 3 時會報錯。
五.可以先把文件過一遍,用到的時候多練習,熟能生巧。
-
3 # web前端小芬
Python是一種計算機程式設計語言。中文名:蟒蛇,釋出於1991年,是一種動態的、面向物件的指令碼語言,最初被設計用於編寫自動化指令碼(shell),隨著版本的不斷更新和語言新功能的新增,越來越多被用於獨立的、大型專案的開發。
-
4 # Python大星
Python 大星掏出了秘密武器 --《正則心法》
學會這門獨門武器,在 “爬者” 境界下將如探囊取物
“宮廷玉液酒,一百八一杯,這酒怎麼樣,看我給你吹”。
先看下正則測試小工具,一般人我不告訴他
http://tool.oschina.net/regex/
小試牛刀:
是不是很神奇...
來來來,Python 大星傳授你一套《正則心法》
圖 1
圖 2
考驗你悟性的時候
從《正則心法》中我們可以看到:
“斜槓 + 小寫字母” 和 “斜槓 + 大寫字母” 語義相反
含大寫字母的一般是否定語句
這些字母不需要死記硬背,背後都有其自然規律
作為 " 爬蟲英語四級” 的老玩家,小 case
w---world
s---space
d---digital
接下來
我會依次展示《正則心法》的奧秘之處
好的 “心法” 必須襯好的 “武器”
re 庫 瞭解哈
“正則心法” 第一式 --match
當我們用《正則心法》第一式獲取到匹配資料,
你以為就 over 了嗎?
刁鑽需求的任務:提取匹配資料中的數字
^ :匹配一行字串的開頭
\s :匹配空格
\d+: 匹配 1 個或多個數字
在正則表示式中使用英文括號 ()
group() 和 group(0) 會提取完整的匹配結果
group (1) 會匹配第一個括號中的子字串
假如正則表示式後面還有 () 包括的內容,那麼可以依次用 group (2)、group (3) 等來獲取
“正則心法” 第二式 -- 通用匹配
Python 大星縱覽群書,發現個重大密碼
萬用字元無一例外的使用 .*
“正則心法” 第三式 -- 貪婪與非貪婪
● 什麼是貪婪匹配?
在貪婪匹配下,. 會匹配儘可能多的字元
括號中是 \d+,
也就是至少一個數字,並沒有指定具體多少個數字,
因此,.* 就儘可能匹配多的字元,這裡就把 123456 匹配了,
給 \d + 留下一個可滿足條件的數字 7,最後得到的內容就只有數字 7 了。
● 什麼又是非貪婪匹配?
非貪婪匹配就是儘可能匹配少的字元
非貪婪匹配的寫法是 .*?
貪婪匹配就是匹配儘可能多的字元
非貪婪匹配就是匹配儘可能少的字元
“正則心法” 第四式 -- 修飾符
當 content 中含有換行符或者大小寫時
需要紅藍 buff 加持 --“修飾符”
跟隨 Python 先打紅 buff-- re.S(匹配包括換行在內的所有字元)
1234567
再打藍 buff -- re.I(使匹配對大小寫不敏感,注意:I 是 i 的大寫)
1234567
“正則心法” 第五式 -- 轉義匹配
說到 “跳脫字元”,萬金油 “斜槓” 來表示
“正則心法” 第六式 --search
前面五式,我們使用的 match 方法是從字串的開頭開始匹配的,
一旦開頭不匹配,那麼整個匹配就失敗了
Python 大星傳授你新的一招 --search
在匹配時,search 方法會依次掃描字串,直到找到第一個符合規則的字串,然後返回匹配內容,如果搜尋完了還沒有找到,就返回 None。
“正則心法” 第七式 --findall
第六式 我們能輕鬆的用 search 方法獲取匹配正則表示式的第一個內容
但是...
當我想要匹配所有符合正則表示式的所有內容呢?
["1234567", "7654321"]
“正則心法” 第八式 --sub
除了使用正則表示式提取資訊外,有時候還需要藉助它來修改文字
Python
“正則心法” 第九式 --compile
最後,Python 傳授畢生功力
準備好接收了嗎?
將正則字串編譯成正則表示式物件,以便在後面的匹配中複用
呼氣,吸氣,收!!!
這套《正則心法》你 get 到了嗎?
回覆列表
你的意思是正則表示式吧,python perl等語言的正則表示式都差不多。
關於正則表示式的知識可以參考專門的書籍。如O’Reilly出版的《精通正則表示式》。