【Python】编程笔记10
生活随笔
收集整理的這篇文章主要介紹了
【Python】编程笔记10
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 正則表達(dá)式
- 一、基本使用
- 二、進(jìn)階——更精確
- 三、re模塊
- 1、match()方法
- 2、split()——切分字符串
- 3、()——分組
- 4、貪婪匹配
- 5、編譯
正則表達(dá)式
- 用于匹配字符串。
- 思想 :用一種描述性的語(yǔ)言來(lái)給字符串定義一個(gè)規(guī)則,凡事符合規(guī)則的字符串,則認(rèn)為“匹配”,否則,不合法。
一、基本使用
| \s | 匹配一個(gè)空格、空白符 |
| \d | 匹配一個(gè)數(shù)字 |
| \w | 匹配一個(gè)字母或數(shù)字 |
| . | 匹配任意字符 |
| * | 匹配任意個(gè)字符(包括0個(gè)) |
| + | 至少一個(gè)字符 |
| ? | 表示0個(gè)或1個(gè)字符 |
| {n} | 表示n個(gè)字符 |
| {n, m} | 表示n~m個(gè)字符 |
注意:可以使用多者的組合形式。
eg:\d{3}\s+\d{3,8}
二、進(jìn)階——更精確
[] 表示范圍,eg:
- [0-9a-zA-Z_] 可以匹配一個(gè)數(shù)字、字母或者下劃線;
- [0-9a-zA-Z_]+可以匹配至少由一個(gè)數(shù)字、字母或者下劃線組成的字符串;
- [a-zA-Z\_][0-9a-zA-Z\_]*可以匹配由字母或下劃線開頭,后接任意個(gè)由一個(gè)數(shù)字、字母或者下劃線組成的字符串;==》合法的變量
A|B 匹配 A 或 B
^ 表示行的開頭,^\d 表示必須以數(shù)字開頭
$ 表示行的結(jié)束,\d$ 表示必須以數(shù)字結(jié)束
三、re模塊
包含所有正則表達(dá)式的功能,需特別注意 \ 轉(zhuǎn)義 或 使用r前綴(可以不考慮轉(zhuǎn)義的問(wèn)題,推薦)
1、match()方法
match()方法 判斷是否匹配,如果匹配成功,返回一個(gè) Match 對(duì)象,否則返回 None。
import re print(re.match(r'^\d{3}\-\d{3,8}$', '010-12345')) print(re.match(r'^\d{3}\-\d{3,8}$', '010 12345'))結(jié)果輸出
<_sre.SRE_Match object; span=(0, 9), match='010-12345'> None常用判斷方法
test = '用戶輸入的字符串' if re.match(r'正則表達(dá)式', test):print('ok') else:print('failed')2、split()——切分字符串
利用正則表達(dá)式將不規(guī)范的輸入轉(zhuǎn)化為正確的數(shù)組
print(re.split(r'\s+','a b c')) print(re.split(r'[\s\,]+', 'a,b, c d')) print(re.split(r'[\s\,\;]+', 'a,b;; c d'))輸出結(jié)果
['a', 'b', 'c'] ['a', 'b', 'c', 'd'] ['a', 'b', 'c', 'd']3、()——分組
用于提取子串,用 () 表示要提取的分組。
m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345') print(m) print(m.group(0)) # 第一個(gè)匹配的子串,永遠(yuǎn)是原始字符串 print(m.group(1)) # 第二個(gè)匹配的子串 print(m.group(2)) # 第三個(gè)匹配的子串t = '19:05:30' m = re.match(r'(0[0-9]|1[0-9]|2[0-3])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])$', t) print(m.groups())結(jié)果輸出
<_sre.SRE_Match object; span=(0, 9), match='010-12345'> 010-12345 010 12345 ('19', '05', '30')4、貪婪匹配
正則匹配默認(rèn)是貪婪匹配,即匹配盡可能多的字符。
## 貪婪匹配 print(re.match(r'^(\d+)(0*)$', '102300').groups()) ## 非貪婪匹配——添加? print(re.match(r'^(\d+?)(0*)$', '102300').groups())結(jié)果輸出
('102300', '') ('1023', '00')5、編譯
當(dāng)使用正則表達(dá)式時(shí),re模塊內(nèi)部會(huì)做兩個(gè)事:
- 編譯正則表達(dá)式,若其本身不合法,則報(bào)錯(cuò);
- 用編譯后的正則表達(dá)式來(lái)匹配字符串。
預(yù)編譯正則表達(dá)式(若該正則表達(dá)要重復(fù)使用幾千次):
編譯后生成Regular Expression 對(duì)象,可以調(diào)用對(duì)應(yīng)的方法實(shí)現(xiàn)字符串匹配。
結(jié)果輸出
('010', '123456') ('010', '8086')總結(jié)
以上是生活随笔為你收集整理的【Python】编程笔记10的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【Python】编程笔记9
- 下一篇: 【Python】编程笔记11