正規表示式
通常我們使用正規表示式來驗證某個字串是否符合要求。
接下面我們簡單講一下正規表示式的表現形式及意義:
形式含義
\w匹配乙個數字/字母
\d匹配乙個數字
\s匹配乙個空格
.匹配任意乙個字元
*匹配任意個字元(包括0個)
+匹配任意個字元(大於1乙個)
n個字元
m - n 個字元
|表示或,匹配前面的內容或後面的內容
^表示行的開頭
$表示行的結尾
\轉義字元,用於需要匹配特殊字元的情況
[ ]方括號表示範圍
根據上面的描述其實已經很容易寫出乙個正規表示式了,接下來我們來試煉一下。正則
含義可pass
不可pass
\d\w
匹配兩個數字,或者開頭乙個數字加上乙個字母
33、3w
ww\d
匹配三個數字
444w42
\d匹配4到8個數字
45245、341351、5143
341、145145166
\d_匹配乙個數字,乙個下劃線
4_44
[a-za-z\d]
匹配乙個字母或者乙個數字
4、d44、dd
[a-za-z\d]*
匹配任意個字母或者乙個數字(包括0個 )
』 『、4dadfa
n/a[a-za-z_$][0-9a-za-z]*
匹配乙個以字母或者下劃線或者 符號
開頭的,
後面帶任
意長度的
數字/字
母的字元
串|rd
a5343、、a、符
號開頭的
,後面帶
任意長度
的數字/
字母的字
符串|r
da
5343、、
a、
fadfa
dad$、1dadafn
\^f必須以f開頭
fdfa、f514314、ffat34134
gf****tiea 、tdfakfdjakfag|
必須以 |必須
以結尾fdkafag、3413fa
g|df
ajka
k、fd
kajt
kea fag
|dfa
jkak
、fdk
ajtk
ea
經過上面的例子、我們基本知道了正規表示式的意義。接下來看如何在python中利用正規表示式。
在python中使用正則
regex = r'\d*'
import re
if re.match(regex, '34341'):
print('ok')
**是不是異常的簡單?在python中使用正則時,re 模組內部會幹兩件事:
編譯正則用編譯後的正則去做匹配
為了提公升效率,我們可以先編譯正規表示式,再在後面直接使用。
regex = r'\d*'
import re
reg = re.compile(regex)
if reg.match('34341'):
print('ok')
python中使用正則來切分字串
使用正則可以幫助一些方法做到一些原先做不到的事情。比如:
'a b c'.split(' ')
# 輸出
> ['a', 'b', ' ', 'c']
上面的情況,我們其實只想要[『a』, 『b』, 『c』],但是有乙個空格沒有被遮蔽掉,導致出現了[『a』, 『b』, 』 『, 『c』],但是利用正則,我們可以做到這一點。
import re
s = r'\s+'
re.split(s, 'a b c d')
通過匹配大於乙個的空格,我們可以成功去除掉所有』 『,給我們想要的結果。注意
我們使用了python的r字首,這樣的話我們就可以不用寫轉義符。否則我們應該這樣寫正則。
import re
s = '\\s+'
re.split(s, 'a b c d')
python中使用正則來分組
所謂分組就是提取字串子串。( ) 中表示的就是想要提取的分組。
比如:
reg = '^(0\d)-(\d)$'
import re
m = re.match(reg, '010-494143891')
if m:
print(m.group(0))
print(m.group(1))
print(m.group(2))
else:
print('don\'t match')
輸出結果
010-494143891
010494143891
通過上面的**,我們根據提供的正則,去匹配字串,看字串是否符合標準,如果符合,我們根據group屬性列印出需要的部分。我們注意到以上正則的寫法:
reg = '^(0\d)-(\d)$'
根據我們描述過的,我們想要提取的內容是放在 ( ) 中的,也就是說我們會分別匹配 - 符號兩邊的內容,如果想連 - 也一起匹配,我們可以這樣寫**。
import re
reg = '^(0\d)(-)(\d)$'
m = re.match(reg, '010-494143891')
if m:
print(m.group(0))
print(m.group(1))
print(m.group(2))
print(m.group(3))
else:
print('don\'t match')
輸出結果
010-494143891
010-
494143891
使用起來也是很簡單,而且容易理解。可以更換想要匹配的字串內容,測試通過和不通過兩種情況。需要注意的一點是,由於**格式的關係,在**
reg = '^(0\d)-(\d)$'
其中,中,數字8和數字11與逗號之間都是不可有空格的,加上空格的話,會導致無法匹配。由於我寫**喜歡在符號後面加上空格,導致我找了挺長時間問題出在哪,有相同習慣的朋友需要注意一下。 Python中使用正規表示式
python unix與linux系統管理指南 學習筆記 python中使用正規表示式,應該要養成建立編譯後的正規表示式的習慣,使用方法如下 usr bin env python import re def run re pattern error re obj re.compile pattern...
Python中使用正規表示式
本文通過示例來描述如何在python中使用正規表示式來統計文字中的所有數字。示例中的文字來自命令列的管道資料,sys.stdin.readlines 主要是因為作者需要在命令列的輸出資訊中做數字統計。示例 1,列出根目錄下所有檔案或資料夾的名稱字串中包含的數字 import re for name ...
Python中使用正規表示式
本文通過示例來描述如何在python中使用正規表示式來統計文字中的所有數字。示例中的文字來自命令列的管道資料,python view plain copy sys.stdin.readlines 主要是因為作者需要在命令列的輸出資訊中做數字統計。示例 1,列出根目錄下所有檔案或資料夾的名稱字串中包含...