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次 匹配字元組裡的任意乙個字元 不匹配字元組裡的任意乙個字...