python re模块
re是python中自带的正则表达式模块,可以用于正则匹配
1. findall() 将匹配到的所有结果塞进列表并返回
import re
# 匹配字符串中的所有字符'a'
result = re.findall("a", "我是一个abcdefag")
print(result) # ['a', 'a']
# 匹配字符串中的所有数字
result = re.findall(r"\d+", "我今年18岁,我有2000块") # 因为反斜杠'\'在字符串中会被当做转移功能,所以要在字符串前面加r
print(result) # ['18', '2000']
2. finditer() 将匹配到的所有结果塞进迭代器并返回,迭代器中存放的是match对象,需要调用.group()获取匹配结果,迭代器可以优化程序性能,当能匹配到多个对象是,优先使用finditer()
import re
# 匹配字符串中的所有数字
result = re.finditer(r"\d+", "我今年18岁,我有2000块")
print(result) # <callable_iterator object at 0x0000027D4A293580>
for item in result:
print(item) # <re.Match object; span=(3, 5), match='18'> <re.Match object; span=(9, 13), match='2000'>
print(item.group()) # 18, 2000
3. search() 它只返回一个match对象,该对象是finditer()匹配到的第一个对象
import re
result = re.search(r"\d+", "我叫周杰伦,今年32岁,我的班级是3年2班")
print(result.group()) # 32
4. match() 它只返回一个match对象,不同的是match相当于在正则匹配表达式前加上了’^’,即只从字符串开头匹配
import re
result = re.match(r"\d+", "9527,我的编号是9527") # 正则表达式相当于是r"^\d+"
print(result.group()) # 9527
5. compile() 预加载正则表达式,相当于将正则表达式存储到一个变量中,方便后面调用,而不需要每次都申请内存
import re
obj = re.compile(r"\d+")
result = obj.findall("我叫周杰伦,今年32岁,我的班级是3年2班")
print(result) # ['32', '3', '2']
6. 如何从正则中提取到我们想要的数据
# 将想要提取的数据用小括号括起来,可以单独取名字
# (?P<名字>正则)
# 提取数据的时候,需要group("名字")
import re
s = """
<div class='⻄游记'><span id='10010'>中国联通</span></div>
<div class='⻄游记'><span id='10086'>中国移动</span></div>
"""
# 想要获取上述字符串中的id和text信息
obj = re.compile(r"<span id='(?P<id>\d+)'>(?P<name>.*?)</span>")
result = obj.finditer(s)
for item in result:
id = item.group("id")
name = item.group("name")
print(id, name) # 10010 中国联通 10086 中国移动