引子
首先說 正則表達式是什么?
正則表達式,又稱正規表示式、正規表示法、正規表達式、規則表達式、常規表示法(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE),計算機科學的一個概念。正則表達式使用單個字符串來描述、匹配一系列匹配某個句法規則的字符串。在很多文本編輯器里,正則表達式通常被用來檢索、替換那些匹配某個模式的文本。
許多程序設計語言都支持利用正則表達式進行字符串操作。例如,在Perl中就內建了一個功能強大的正則表達式引擎。正則表達式這個概念最初是由Unix中的工具軟件(例如sed和grep)普及開的。正則表達式通??s寫成“regex”,單數有regexp、regex,復數有regexps、regexes、regexen。
引用自維基百科https://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F
定義是定義,太正經了就沒法用了。我們來舉個栗子:假如你在寫一個爬蟲,你得到了
一個網頁的HTML源碼。其中有一段
<html><body><h1>hello world<h1></body></html>
你想要把這個hello world提取出來,但你這時如果只會python 的字符串處理,那么第一反應可能是
s = <html><body><h1>hello world<h1></body></html>start_index = s.find('<h1>')
然后從這個位置向下查找到下一個<h1>出現這樣做未嘗不可,但是很麻煩不是嗎。需要考慮多個標簽,一不留神就多匹配到東西了,而如果想要非常準確的匹配到,又得多加循環判斷,效率太低。
這時候,正則表達式就是首選的幫手。
干貨開始
入門級別
接著說我們剛才那個例子。我們如果拿正則處理這個表達式要怎么做呢?
import rekey = r"<html><body><h1>hello world<h1></body></html>"#這段是你要匹配的文本p1 = r"(?<=<h1>).+?(?=<h1>)"#這是我們寫的正則表達式規則,你現在可以不理解啥意思pattern1 = re.compile(p1)#我們在編譯這段正則表達式matcher1 = re.search(pattern1,key)#在源文本中搜索符合正則表達式的部分print matcher1.group(0)#打印出來
你可以嘗試運行上面的代碼,看看是不是和我們想象的一樣(博主是在python2.7環境下)發現代碼挺少挺簡單?往下看。而且正則表達式實際上要比看起來的那種奇形怪狀要簡單得多。
首先,從最基礎的正則表達式說起。
假設我們的想法是把一個字符串中的所有"python"給匹配到。我們試一試怎么做
import rekey = r"javapythonhtmlvhdl"#這是源文本p1 = r"python"#這是我們寫的正則表達式pattern1 = re.compile(p1)#同樣是編譯matcher1 = re.search(pattern1,key)#同樣是查詢print matcher1.group(0)
新聞熱點
疑難解答