python學習014 正則

2021-09-25 21:56:17 字數 4936 閱讀 5901

python正規表示式基礎

正規表示式,又稱規則表示式**。**(英語:regular expression,在**中常簡寫為regex、regexp或re),電腦科學的乙個概念。正規表示式通常被用來檢索、替換那些符合某個模式(規則)的文字。

使用場景

在python中使用正則需要匯入re

import re
首先我們來看兩個例子來體驗一下正規表示式的威力吧:

比如,已知乙個列表:

​ li = [「chinese」, 「china」, 「english」, 「britain」, 「canada」, 「new zealand」]

找出以ch開頭的字串。

# 法1

li =

["chinese"

,"china"

,"english"

,"britain"

,"canada"

,"new zealand"

]lt =

for i in li:

if i[0:

2]=="ch"

:print

(lt)

# 法2

li =

["chinese"

,"china"

,"english"

,"britain"

,"canada"

,"new zealand"

]print

([i for i in li if i[0:

2]=="ch"

])

a = 『ab23fd5g67』

取出 23 5 67

import re

a ='ab23fd5g67'

m = r'[0-9]+'

num = re.findall(m,a)

print

(num)

#輸出[

'23'

,'5'

,'67'

]

在python術語中,主要有兩種方法完成模式匹配:「搜尋」(re.search),即在字串任意部分中搜尋匹配的模式;而「匹配」是指判斷乙個字串從頭到尾是否都符合。

引數說明:

re.group([group1,…])字串或者元組

re.groups([ default = none]) tuple

字元功能.

匹配任意乙個字元(除了 \n)

[ ]匹配 [ ] 中列舉的字元

\d匹配數字 (0~9)

\d匹配非數字 (\d 取反)

\w匹配字,az,az,0~9,_

\w\w取反

\s匹配空白字元,比如空格 \tab

\s\s取反

1

.import re

m = re.match(

'.',

'cbc'

)print

(m.group())

#輸出c2.

import re

m = re.match(

's',

'sbc'

)print

(m.group())

#輸出s3.

import re

m = re.match(

'[ss]'

,'sbc'

)print

(m.group())

#注意,一般是要根據字串來選擇正確的正規表示式

#輸出s4.

import re

m = re.match(

'[0-9]'

,'66city'

)print

(m.group())

#輸出65.

import re

m = re.match(

'\d'

,'66city'

)print

(m.group())

#輸出66.

import re

m = re.match(

'\d'

,'city'

)print

(m.group())

#輸出c7.

import re

m = re.match(

'\w'

,'ity'

)print

(m.group())

#輸出i8.

import re

m = re.match(

'\s'

,' ity'

)print

(m.group())

#輸出乙個空格

字元功能*

匹配前乙個字元出現0次多次或者無限次,可有可無,可多可少

+匹配前乙個字元出現1次多次或者無限次,直到出現一次

?匹配前乙個字元出現1次或者0次,要麼有1次,要麼沒有

匹配前乙個字元出現m次

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

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

*

import re

m = re.match(

'[a-z][a-z]*'

,'aaaatsy'

)print

(m.group())

#輸出a

import re

m = re.match(

'[a-z]*[a-z]'

,'aaaaaatsy'

)print

(m.group())

#輸出aaaaaa

import re

m = re.match(

'[a-z]*[a-z]*'

,'aaaaaatsy'

)print

(m.group())

#輸出aaaaaatsy

+

import re

m = re.match(

'[a-z][a-z]+'

,'aa'

)#前乙個字元不能是0次

print

(m.group())

#輸出aa

手機號匹配

import re

#手機號匹配,11位,數字,1開頭,第二位35678中的一位

pattern =

input

(':'

)sr =

input

(':'

)m = re.match(pattern, sr)

print

(m.group())

:1[35678

]\d#輸入的規則

:13555545454

#輸入的號碼

13555545454

#輸出的號碼

字元功能^

匹配字串開頭

$匹配字串的結尾

\b匹配乙個單詞的邊界

\b匹配非單詞邊界( \b取反)

import re

# ci ty university

sr =

input

(':'

)pattern =

input

(':'

)m = re.match(pattern, sr)

print

(m.group())

:ci ty university #要匹配的字元

:^\w+\s\bty\b\s\w+

#匹配的規則

ci ty university

字元功能|

匹配左右任意乙個表示式

(ab)

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

\num

引用分組num匹配到的字串

(?p)

分組起別名

(?p=name)

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

import re

# ci ty university

sr =

input

(':'

)pattern =

input

(':'

)m = re.match(pattern, sr)

print

(m.group())

#0~100的數:22

:0$|[1

-9]\d$|

100$ #規則

22

import re

sr =""

pat =

'<(.+)><(.+)>(.*))'

res = re.match(pat,sr)

print

(res.group())

print

(res.group(1)

)

import re

print

(re.search(

'yun'

,'aliyun is a.'

).group())

#輸出yun

re.match()和re.search()的區別

作用:獲取字串所有匹配的字串,並以列表形式返回

作用:獲取字串所有匹配的字串,並返回乙個迭代器

import re

for i in re.finditer(

'yun'

,'aliyun is a yun.'):

print

(i.group())

#輸出yun

yun

Python練習例項014

問題 將乙個正整數分解質因數。例如 輸入90,列印出90 2 3 3 5。usr bin env python3 coding utf 8 author ma yi blog date 2020 06 18 name demo014 software pycharm note 將乙個正整數分解質因數...

Python基礎014 模組安裝

安裝外部的模組有很多種方式,不同的系統安裝形式也不同.外部模組就是在你 import 什麼東西到python 指令碼的時候會用到的.import numpy as np import matplotlib.pyplot as plt 這裡的 numpy 和 matplotlib 都是外部模組,需要安...

python 正則學習

常見萬用字元如下 匹配任何字元 換行符除外 匹配字串開始 匹配字串結尾 匹配前面出現的正規表示式0次或多次 匹配前面出現的正規表示式1次或多次 匹配前面出現的正規表示式0次或1次 匹配前面出現的正規表示式n次 匹配前面出現的正規表示式 m到n次 匹配字元組裡的任意乙個字元 不匹配字元組裡的任意乙個字...