Python中使用正規表示式

2021-08-26 05:30:27 字數 3670 閱讀 4969

正規表示式

通常我們使用正規表示式來驗證某個字串是否符合要求。

接下面我們簡單講一下正規表示式的表現形式及意義:

形式含義

\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,列出根目錄下所有檔案或資料夾的名稱字串中包含...