1.常用正規表達式
python的正則網站:
<a href="https://regex101.com/" target="_blank">https://regex101.com/</a>
<a href="https://s1.51cto.com/oss/201711/14/1d206179ad936f3c261624762d109658.png" target="_blank"></a>
注釋:分組
(?P<name>…)省略的部分就是正常的正則比對,我們把比對到的這個整體給賦一個變量名字name,在後續調用的時候,就友善多了
2.re子產品
re子產品是python中處理正規表達式的一個子產品,通過re子產品的方法,把正規表達式pattern編譯成正則對象,以便使用正則對象的方法。
那為什麼要使用re子產品來把正規表達式搞成正則對象呢,最主要的是可以提高代碼的執行效率,我們來看個例子:
<code>import</code> <code>timeit</code>
<code>print</code> <code>timeit.timeit(setup</code><code>=</code><code>'''import re; reg = re.compile('<(?P<tagname>\w*)>.*</(?P=tagname)>')'''</code><code>, stmt</code><code>=</code><code>'''reg.match('<h1>xxx</h1>')'''</code><code>, number</code><code>=</code><code>1000000</code><code>)</code>
<code>print</code> <code>timeit.timeit(setup</code><code>=</code><code>'''import re'''</code><code>, stmt</code><code>=</code><code>'''re.match('<(?P<tagname>\w*)>.*</(?P=tagname)>', '<h1>xxx</h1>')'''</code><code>, number</code><code>=</code><code>1000000</code><code>)</code>
結果:
0.504413156462
1.20703154234
解釋:timeit.timeit是用來統計程式執行的時間的,和明顯第一個print的執行時間要比第二個的執行時間快好多,這個就是把正則表達是表示成正則對象最明顯的好處。
正則比對總寫一個r是什麼意思?
r表示raw的簡及raw string 意思是原生字元,也就是說是這個字元串中間的特殊字元不用轉義
比如你要表示‘\n’,可以這樣:r'\n'
但是如果你不用原生字元 而是用字元串你得這樣:‘\\n’
3.編譯正則對象
re.compile(pattern[, flags])
這個方法是就是将字元串的正規表達式編譯城正則對象,第二個參數flag是比對模式,取值可以使用按位或者運算符“|”表示同時生效,比如:re.I | re.M,flag的可選值有:
re.I(re.IGNORECASE): 忽略大小寫(括号内是完整寫法,下同)
M(MULTILINE): 多行模式,改變'^'和'$'的行為
S(DOTALL): 點任意比對模式,改變'.'的行為
L(LOCALE): 使預定字元類 \w \W \b \B \s \S 取決于目前區域設定
U(UNICODE): 使預定字元類 \w \W \b \B \s \S \d \D 取決于unicode定義的字元屬性
X(VERBOSE): 詳細模式。這個模式下正規表達式可以是多行,忽略空白字元,并可以加入注釋。
以下兩個正規表達式是等價的:
<code>import</code> <code>re</code>
<code>a </code><code>=</code> <code>re.</code><code>compile</code><code>(r</code><code>"""\d + # the integral part</code>
<code> </code><code>\. # the decimal point</code>
<code> </code><code>\d * # some fractional digits"""</code><code>, re.X)</code>
<code>b </code><code>=</code> <code>re.</code><code>compile</code><code>(r</code><code>"\d+\.\d*"</code><code>)</code>
<code></code>
本文轉自 聽丶飛鳥說 51CTO部落格,原文連結:http://blog.51cto.com/286577399/1981849