正規表示式

2021-08-19 22:39:00 字數 3104 閱讀 1079

1.re模組的使用方式

# 匯入re模組

import re

# 使用match方法進行匹配操作

result = re.match(正則匹配表示式,要匹配的字串)

# 如果上一步匹配到資料的話,使用group方法提取資料,否則返回none

result.group()

import re

pattern = compile(r'匹配規則', re.i)

# re.i 忽略大小寫

# re.s 表示全文匹配

pattern.match('需匹配的字串')

2.表示字元字元

功能.匹配任意字元,除了(\n)

[ ]匹配[ ]列舉的字元

\d匹配數字,即0-9

\d匹配非數字

\s匹配空格,即空格,tab建

\s匹配非空格

\w匹配單詞字元,即a-z,a-z,0-9,_

\w匹配非單詞字元

re.match(『1\d\d』,』123』)

re.match(『1[123]\d』, 123)

re.match(『1[^123]\d』, 『123』) # 在方括號裡面寫』^』,表示取反

3.表示數量字元

功能*匹配前乙個字元出現0次或者無限次

+匹配前乙個字元出現1次或者無限次

?匹配前乙個字元出現1次或者0次

匹配前乙個字元出現m次

匹配前乙個字元至少出現m次

匹配前乙個字元出現從m次到n次

re.match(『1[13578]/d』,』13345678901』)

4.原始字串

# 在字串中如果出現'\',需要使用原始字串進行匹配

re.match(r'\\nabc', '\\nabc')

5.表示邊界字元

功能^匹配字串開頭

$匹配字串結尾

\b匹配乙個單詞的邊界

\b匹配非單詞邊界

re.match(r』^1[35678]\d$』,』18111111111』)

re.match(r』^\w+\s\bve\b』, 『ho ve r』)

re.match(r』^.+ve\b』, 『ho ver』)

6.匹配分組字元

功能(?p<』name』>)

分組起別名

(?p=name)

引用分組名為name分組匹配到的字串 字元

功能|匹配左右任意乙個表示式

(ab)

將括號中字元作為乙個分組

\num

引用分組num匹配到的字串,如\2,\1

# 匹配1-100之間的數字

re.match(r'[1-9]\d?$|0$|100$', '85')

re.match(r'[1-9]?/d?$|100$', '85')

s = ''

result = re.match(r'', s)

result.group()

result.group(1)

result.groups()

結果為:

'匹配分組'

'匹配分組'

('匹配分組',)

s = '

're.match(r'<(.+)><(.+)>.+', s)

s = '

're.match(r'<(?p.+)><(?p.+)>.+', s)

7.re的高階用法

re.match() # 從起始位置開始往後查詢,返回第乙個符合規則的,只匹配一次

re.search() # 從任何位置開始往後查詢,返回第乙個符合規則的,只匹配一次

re.findall() # 所有的全部匹配,返回列表

re.finditer() # 所有的全部匹配,返回的是乙個迭代器

re.split() #分割字串,返回列表

re.sub() # 替換

(1)search

s = 'itcast'

re.sub(r'', '', s)

結果為:

靜夜思窗前明月光

(4)split

s = 'itcast,php,python-cpp'

re.split(r':|,|-|', s)

結果為:

['itcast', 'php', 'python', 'cpp']

8.貪婪模式和非貪婪模式

python裡數量詞預設是貪婪的,總是嘗試匹配盡可能多的字元

非貪婪則相反,總是嘗試匹配盡可能少的字元

在』*』, 『?』, 『+』,』』後面加上』?』,使得貪婪模式變成非貪婪模式

# 貪婪模式下

s = 'this is a number 234-456-789'

r = re.match(r'(.+)(\d+-\d+-\d+)', s)

r.groups()

結果為:

# 檢測到d+有乙個數字就可以完成匹配

('this is a number 23', '4-456-789')

# 非貪婪模式下

s = 'this is a number 234-456-789'

r = re.match(r'(.+?)(\d+-\d+-\d+)', s)

r.groups()

結果為:

('this is a number ', '234-456-789')

9.練習

提取**前面的一部分

結果為;

正規表示式 正規表示式 總結

非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...

正規表示式 表示式

網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...

Linux正規表示式 編寫正規表示式

為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...