python的re模块总结
- 一. 一个切分字符串为列表函数;两个替换字符串内容函数;四个查找函数
- 1.1 四个查找函数findall、finditer、search、match
- 1.1.1 findall
- 1.1.1.1 返回所有匹配的字符串的列表
- 1.1.1.2 括号分组优先显示(如果正则表达式中有分组,则只显示分组内容,而不会显示整体匹配的字符串,如果有多个分组,则以元祖的形式都显示)
- 1.1.1.2 用?:取消分组优先显示
- 1.1.2 finditer
- 1.1.2.1 返回一个包含搜索匹配字符串的re.Match对象的迭代器
- 1.1.2.2 finditer方法没有分组优先权
- 1.1.3 search
- 1.1.3.1 只返回第一个匹配字符串的re.Match对象; 用该对象的group()方法得到字符串
- 1.1.3.2 如果正则表达式中有分组则group()和group(0)是匹配的整个字符串,group(1), group(2)分别是第一个和第二个分组中的字符串
- 1.1.4 match
- 1.1.4.1 match和search方法基本一样,只是必须从头匹配
- 1.1.4.2 如果正则表达式中有分组则group()和group(0)是匹配的整个字符串,group(1), group(2)分别是第一个和第二个分组中的字符串
- 1.2 两个替换字符串函数sub、subn
- 1.2.1 sub
- 1.2.2 subn
- 1.3 一个切分字符串为列表函数split
- 1.3.1 以正则匹配到的字符串来切分字符串,如果正则表达式没有分组则正则匹配的字符串不要
- 1.3.2 以正则匹配到的字符串来切分字符串,如果正则表达式有分组则分组匹配的字符串要import re
一. 一个切分字符串为列表函数;两个替换字符串内容函数;四个查找函数
1.1 四个查找函数findall、finditer、search、match
1.1.1 findall
1.1.1.1 返回所有匹配的字符串的列表
import re
reg = ".*?\."
s = "www.sina.com.cn"
res = re.findall(reg, s)
print(res)
结果:
['www.', 'sina.', 'com.']
1.1.1.2 括号分组优先显示(如果正则表达式中有分组,则只显示分组内容,而不会显示整体匹配的字符串,如果有多个分组,则以元祖的形式都显示)
import re
reg = "(.*?)(\.)"
s = "www.sina.com.cn"
res = re.findall(reg, s)
print(res)
结果:
[('www', '.'), ('sina', '.'), ('com', '.')]
1.1.1.2 用?:取消分组优先显示
import re
reg = "(?:.*?)(?:\.)"
s = "www.sina.com.cn"
res = re.findall(reg, s)
print(res)
结果:
['www.', 'sina.', 'com.']
1.1.2 finditer
1.1.2.1 返回一个包含搜索匹配字符串的re.Match对象的迭代器
用group()可以得到匹配的字符串
1.1.2.2 finditer方法没有分组优先权
1.1.3 search
1.1.3.1 只返回第一个匹配字符串的re.Match对象; 用该对象的group()方法得到字符串
import re
reg = ".*?\."
s = "www.sina.com.cn"
res = re.search(reg, s)
print(res)
print(res.group())
结果:
<re.Match object; span=(0, 4), match='www.'>
www.
1.1.3.2 如果正则表达式中有分组则group()和group(0)是匹配的整个字符串,group(1), group(2)分别是第一个和第二个分组中的字符串
1.1.4 match
1.1.4.1 match和search方法基本一样,只是必须从头匹配
import re
reg = "1.*?\."
s = "1www.sina.com.cn"
res = re.match(reg, s)
print(res)
print(res.group())
结果:
<re.Match object; span=(0, 5), match='1www.'>
1www.
1.1.4.2 如果正则表达式中有分组则group()和group(0)是匹配的整个字符串,group(1), group(2)分别是第一个和第二个分组中的字符串
import re
reg = "(1.*?)(\.)"
s = "1www.sina.com.cn"
res = re.match(reg, s)
print(res)
print(res.group())
print(res.group(0))
print(res.group(1))
print(res.group(2))
结果:
<re.Match object; span=(0, 5), match='1www.'>
1www.
1www.
1www
.
1.2 两个替换字符串函数sub、subn
1.2.1 sub
用正则匹配后替换匹配的字符串后返回这个替换后的字符串
import re
reg = "(.*?)(\.)"
s = "www.sina.com.cn"
ss = re.sub(reg, "大", s)
print(s)
print(ss)
结果:
www.sina.com.cn
大大大cn
1.2.2 subn
用正则匹配后替换匹配的字符串后返回一个元组(这个替换后的字符串, 替换次数)
import re
reg = "(.*?)(\.)"
s = "www.sina.com.cn"
ss = re.subn(reg, "大", s)
print(s)
print(ss)
结果:
www.sina.com.cn
('大大大cn', 3)
1.3 一个切分字符串为列表函数split
1.3.1 以正则匹配到的字符串来切分字符串,如果正则表达式没有分组则正则匹配的字符串不要
import re
reg = ".*?\."
s = "www.sina.com.cn"
lst = re.split(reg, s)
print(lst)
结果:
['', '', '', 'cn']
1.3.2 以正则匹配到的字符串来切分字符串,如果正则表达式有分组则分组匹配的字符串要import re
reg = "(.*?)\."
s = "www.sina.com.cn"
lst = re.split(reg, s)
print(lst)
结果:
['', 'www', '', 'sina', '', 'com', 'cn']