python正則判斷 Python 正規表示式

2021-10-11 12:37:21 字數 4614 閱讀 6397

一、基礎語法

1.1 語法速查

1.2 最簡單的正則匹配

學習正則一般是從 match 和 search 函式開始,推薦教程。

match

match(pattern, string) 函式會從字串的頭部開始搜尋,如果匹配到了 pattern 則將其結果存入 group 中,匹配到了幾次就存入幾次,如果沒有匹配到則返回空。

import re

a = "jack love rose"

res = re.match(r"jack", a)

if res:

print(res.group(0))

輸出結果

jack

search

如果想在句子中匹配某個單詞應該使用 search() 函式,使用match() 函式是搜尋不到的

import re

a = "jack love coding!"

res1 = re.match(r"love", a)

res2 = re.search(r"love", a)

if res1:

print(res1.group(0))

if res2:

print(res2.group(0))

輸出結果

love

如果匹配了多個結果,那麼同樣的,輸出 group(2)、group(3)……

import re

a = "jack love rose and love coding!"

res = re.search(r"jack (.*) and (.*) coding!", a)

if res:

print(res.group(1))

print(res.group(2))

輸出結果

love rose

love

match 和 search 函式適合於本身已經知道了有幾個需要匹配項的情況,如果需要找出所有的匹配項,應該使用 findall,後面會講到。

compile

函式宣告

re.compile(pattern[, flags])

flags 是乙個可選引數,表示匹配模式,比如忽略大小寫,多行模式等,具體引數為:

我們來嘗試一下

import re

a = "jack love rose and love coding!"

# 忽略大小寫

pattern = re.compile(r"jack (.*) and (.*) coding!", re.i)

res = pattern.match(a)

if res:

print(res.group(1))

print(res.group(2))

輸出結果

love rose

love

findall

在字串中找到正規表示式所匹配的所有子串,並返回乙個列表,如果沒有找到匹配的,則返回空列表。

注意: match 和 search 是匹配一次, findall 匹配所有。

import re

pattern = re.compile(r'\d+') # 查詢數字

result2 = pattern.findall('www.hao123baidu456.com', 0, 10) # 指定匹配範圍

print(result1)

print(result2)

輸出結果

['123', '456']

['123']

1.3 轉義字元匹配

轉義字元的匹配需要 "\" 做轉義。匹配括號

import re

# 匹配括號裡的內容

# 忽略大小寫

pattern = re.compile(r"\((.*)\)")

res = pattern.findall(a)

print(res[0])

輸出內容

baidu匹配$

$是乙個特殊的字元,在正則中表示以某字元結尾,假設我們要匹配 $$ 中間的內容(經常在公式轉換中使用),應該怎麼寫呢?

import re

a = "$y=x^2$"

# 匹配$$中間的內容

pattern = re.compile(r"\$(.*)\$")

res = pattern.findall(a)

print(res[0])

輸出結果

y=x^2

其他的轉義字元使用方式類似。

1.4 正則替換

python 的re模組提供了re.sub用於替換字串中的匹配項。函式宣告如下

re.sub(pattern, repl, string, count=0, flags=0)【例 1】將字串中的 s 替換為 a

import re

a = "this is hust"

pattern = re.compile(r"s")

res = re.sub(pattern, "a", a)

print(res)

輸出結果

thia ia huat【例 2】將字串中的 $a$ 替換為 `$a$`

import re

# replace $a$ to `$a$`

a = "設集合$a=$,求集合$a$的子集個數。"

b = re.sub(r'\$(.+?)\$', r'`$\1$`', a)

print(a)

print(b)

輸出結果

設集合$a=$,求集合$a$的子集個數。

設集合`$a=$`,求集合`$a$`的子集個數。

這裡有個注意的點, \1 表示匹配到的內容。【例 2】將字串中的無效,測試替換為空字元

import re

a = "華中科技大學機械學院(無效)"

b = "華中科技大學紫菘公寓(測試)"

c = "華中科技大學無效紫菘測試公寓(西區)"

pattern = re.compile(u"(無效|測試)")

res1 = re.sub(pattern, "", a)

res2 = re.sub(pattern, "", b)

res3 = re.sub(pattern, "", c)

print(res1)

print(res2)

print(res3)

輸出結果

華中科技大學機械學院()

華中科技大學紫菘公寓()

華中科技大學紫菘公寓(西區)

二、高階用法

2.1 判斷字串是否為數字

import re

a = "-1234"

b = "-12.34"

c = ".34"

print(re.match(r'^[+-]?\d+$', a)) # 匹配int 1

print(re.match(r'^[+-]?[0-9].*$', a)) # 匹配int 2

print(re.match(r'^[+-]?\d*(\.)\d+$', b)) # 匹配float

print(re.match(r'^[+-]?\d*(\.)\d+$', c)) # 匹配float

print(re.match(r'^[+-]?\d*(\.)?\d+$', a)) # 匹配int 或 float

輸出結果

2.2 去除括號中的內容

去除括號裡的內容其實就是利用 re.sub 的替換功能

import re

a = "華中科技大學附屬同濟醫院(西區)"

pattern = re.compile(u"\$(.*)\$")

res = re.sub(pattern, "", a)

print(res)

輸出結果

華中科技大學附屬同濟醫院

2.3 去除髒符號【例 1】因為平時工作中接觸資料很多,經常需要對資料進行清洗,其中乙個很重要的流程就是去除字串中除了中文、英文、括號之外的所有字元,這個實現如下

import re

a = "華中科技大學機械學院 b240 (研究生工作室;**聯絡)。"

pattern = re.compile(u"[^\u4e00-\u9fa50-9a-za-z()()]")

res = re.sub(pattern, "", a)

print(res)

輸出結果

華中科技大學機械學院b240(研究生工作室**聯絡)【例 2】括號內不是期或者區則刪掉括號內容

import re

a = "華中科技大學紫菘公寓(一期)。"

b = "華中科技大學紫菘公寓(西)。"

pattern = re.compile(u"\((?!.*[區期]).*\)|\((?!.*[區期]).*\)")

res1 = re.sub(pattern, "", a)

res2 = re.sub(pattern, "", b)

print(res1)

print(res2)

輸出結果

華中科技大學紫菘公寓(一期)。

華中科技大學紫菘公寓。

Python學習筆記 1 1 2 認識Python

一.課程目標 二.詳情解讀 1.初識pythonpython語言是一種高階程式語言,它於1991年由吉多.範羅蘇姆 guido van rossum 發明。目前主要應用於web開發 gui開發 網路爬蟲 資料科學 人工智慧等領域。python官方 python語言也是一種多正規化程式語言,即物件導向...

python實現演算法 kmp演算法python實現

kmp演算法python實現 kmp演算法 kmp演算法用於字串的模式匹配,也就是找到模式字串在目標字串的第一次出現的位置 比如abababc 那麼bab在其位置1處,bc在其位置5處 我們首先想到的最簡單的辦法就是蠻力的乙個字元乙個字元的匹配,但那樣的時間複雜度會是o m n kmp演算法保證了時...

python呼叫qt Qt 下呼叫 Python

qt是乙個跨平台的c 圖形使用者介面應用程式框架,而python是一門非常強大的程式語言,本文主要介紹了如何在osx系統下qt呼叫python指令碼。先上 include 包含呼叫python相應的標頭檔案 include int main int argc,char ar 初始化python直譯器...