python之正则表达式[Python基础]
1,什么是正则表达式?
正则表达式(regular expression)是用来简洁表达一组字符串的表达式。
2,作用是什么?
①表达文本类型的特征。 ②同时查找或替换一组字符串。 ③匹配字符串的全部或部分。
3,常用的操作符:
操作符
说明
例子
.
表示任何单个字符
[]
字符集,对单个字符给出取值范围
[abc]表示a,b,c,[a-z]表示a-z单个字符
[^]
非字符集,对单个字符给出排除范围
[^abc]表示除a,b,c之外的单个字符
*
前一个字符0次或无限次扩展
abc*表示ab,abc,abcc,abccc等等
+
前一个字符1次或无限次扩展
abc+表示abc,abcc,abccc等等
?
前一个字符出现或者不出现
abc表示ab,abc
|
左右表达式任意一个
abc|def表示abc,def
{m}
扩展前一个字符m次
ab{4}c表示abbbbc
{m,n}
扩展前一个字符m到n次,含m,n
ab{1,2}c表示abc,abbc
^
匹配字符串开头
^abc表示abc且在字符串的开头
$
匹配字符串结尾
abc$表示abc且在字符串的结尾
()
分组标记,内部只能使用 | 操作符
(abc)表示abc,(abc | def)表示abe、def
d
数字,等价于[0,9]
w
单词字符,等价于[A-Za-z0-9_]
4,正则表达式的一些语法实例
正则表达式
对应的字符串
P(Y|YT|YTH|YTHO)?N
"PN","PYN","PYTN","PYTHN","PYTHON"
PYTHON+
"PYTHON","PYTHONN","PYTHONNN".......
PY[TH]ON
"PYTON","PYHON"
PY[^TH]?ON
"PYON","PYAON","PYBON","PYCON"......
PY{:3}N
"PN","PYN","PYYN","PYYYN"
5,经典的正则表达式实例
^[A-Za-z]+$
由26个字母组成的字符串
^[A-Za-z0-9]+$
由26个字母和数字组成的字符串
^-?d+$
整数形式的字符串
^[0-9]*[1-9][0-9]*$
正整数形式的字符串
[1-9]d{5}
中国境内的邮政编码
[u4e00-u9fa5]
匹配中文字符
d{3}-d{8}|d{4}-d{7}
国内的电话号码,010-12345678
[1-9]?d
0-99
1d{2}
100-199
2[0-4]d
200-249
25[0-5]
250-255
(([1-9]?d|1d{2}|2[0-4]d|25[0-5]).){3}([1-9]?d|1d{2}|2[0-4]d|25[0-5])
匹配ip地址
6,re库的基本使用
re.search()
在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象
re.match()
从一个字符串的开始位置起匹配正则表达式,返回match对象
re.findall()
搜索字符串,以列表类型返回全部能匹配的子串
re.split()
将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
re.finditer()
搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象
re.sub()
在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串
①search(pattern, string, flags=0)
pattern:正则表达式的字符串或原生字符串表示
string:待匹配字符串
flags:正则表达式使用时的控制标记
1import re2 match = re.search(r"[1-9]d{5}", "haha 723300")3if match:4print(match.group())56 G:Project1venvScriptspython.exe G:/Project1/practice/lianxi2.py
7 723300
8
9 Process finished with exit code 0
search
②match(pattern,string,flags=0)
需要注意的是 match 函数是从字符串开始处开始查找,如果开始处不匹配,则不再继续寻找,若找到返回值为 一个 match 对象,找不到时返回 None
1import re 2 match = re.match(r"[1-9]d{5}", "haha 723300") 3print(type(match)) 4 match = re.match(r"[1-9]d{5}", "723300 haha") 5if match: 6print(match.group()) 78 G:Project1venvScriptspython.exe G:/Project1/practice/lianxi2.py
9 <class"NoneType">
10 723300
11
12 Process finished with exit code 0
match
可见search与match的区别在于:
match要求待匹配的子串必须在字符串的起始位置,否则查找不到,而search则无此要求
③findall(pattern,string,flags=0)
1import re 2 c = re.findall(r"[1-9]d{5}", "haha723300 xixi612203") 3print(type(c)) 4print(c) 56 G:Project1venvScriptspython.exe G:/Project1/practice/lianxi2.py
7 <class"list">
8 ["723300", "612203"]
9
10 Process finished with exit code 0
findall
④split(pattern,string,maxsplit=0,flags=0)
maxsplit:最大分割数,剩余部分作为最后一个元素输出
1import re 2 a = re.split(r"[1-9]d{5}", "haha723300 xixi612203") 3print(type(a)) 4print(a) 56 a = re.split(r"[1-9]d{5}", "haha723300 xixi612203", maxsplit=1)
7print(a)
8
9 str1 = "name: hpl, age: 18"
10 b = re.split(r":|,", str1)
11print(b)
12
13
14 G:Project1venvScriptspython.exe G:/Project1/practice/lianxi2.py
15 <class"list">
16 ["haha", " xixi", ""]
17 ["haha", " xixi612203"]
18 ["name", " hpl", " age", " 18"]
19
20 Process finished with exit code 0
split
⑤finditer(pattern,string,flags=0)
1import re 2for m in re.finditer(r"[1-9]d{5}", "haha723300 xixi612203"): 3if m: 4print(m.group()) 56 G:Project1venvScriptspython.exe G:/Project1/practice/lianxi2.py
7 723300
8 612203
9
10 Process finished with exit code 0
finditer
⑥sub(pattern,repl,string,count=0,flags=0)
repl:替换匹配字符串的字符串
count:匹配的最大替换次数
1import re2 m = re.sub(r"[1-9]d{5}", "love", "haha723300 xixi612203")3if m:4print(m)56 G:Project1venvScriptspython.exe G:/Project1/practice/lianxi2.py
7hahalove xixilove
8
9 Process finished with exit code 0
sub
7,re库的match对象
属性:
string 待匹配的文本
re 匹配时使用的pattern对象(正则表达式)
pos 正则表达式搜索文本的开始位置
endpos 正则表达式搜索文本的结束位置
方法:
group() 获得匹配后的字符串
start() 匹配字符串在原始字符串的开始位置
end() 匹配字符串在原始字符串的结束位置
span() 返回(start)…(end)
1import re 2 match = re.search(r"[1-9]d{5}", "haha723300 xixi612203") 3print(match.string) 4print(match.re) 5print(match.pos) 6print(match.endpos) 7print(match.group()) 8print(match.start()) 9print(match.end())10print(match.span())1112 G:Project1venvScriptspython.exe G:/Project1/practice/lianxi2.py
13haha723300 xixi612203
14 re.compile("[1-9]d{5}")
150
16 21
17 723300
18 4
19 10
20 (4, 10)
21
22 Process finished with exit code 0
re库的match对象
8,re库的贪婪匹配和最小匹配
①re库默认采用贪婪匹配,即输出匹配最长的子串
1import re2 match = re.search(r"PY.*N","PYANBNCNDN")3print(match.group())45 G:Project1venvScriptspython.exe G:/Project1/practice/lianxi2.py
6PYANBNCNDN
7
8 Process finished with exit code 0
贪婪匹配
②最小匹配的方法:在扩展操作符后加?
操作符
说明
*?
前一个字符0次或无限次扩展,最小匹配
+?
前一个字符1次或无限次扩展,最小匹配
??
前一个字符0次或1次扩展,最小匹配
[m,n]?
扩展前一个字符m至n次(含n),最小匹配
1import re2 match = re.search(r"PY.*?N","PYANBNCNDN")3print(match.group())45 G:Project1venvScriptspython.exe G:/Project1/practice/lianxi2.py
6PYAN
7
8 Process finished with exit code 0
最小匹配
以上是 python之正则表达式[Python基础] 的全部内容, 来源链接: utcz.com/z/530754.html