如何在python程序中使用正则表达式?就是使用re模块
re模块使用:
1、findall查找所有,返回list
python
list = re.findall("n","I love learning English and Chinese!")
print(list) # 输出结果:['n','n','n','n','n']
list = re.findall(r"\d+","这件物品的长度约为2米,宽度和高度均为50厘米。")
print(list) # 输出结果:['5','5000']
2、search会进行匹配,返回匹配到的第一个结果,没有匹配到则返回None
python
ret = re.search(r"\d","这件物品的长度约为2米,宽度和高度均为50厘米。").group()
print(ret) # 输出结果:['5']
3、match只能从字符串的开头进行匹配
python
ret = re.match('a','abc').group()
print(ret) # a
4、finditer,和findall差不多,只不过这时返回的是迭代器(重点)
python
it = re.finditer("n","I love learning English.")
for el in it:
print(el.group()) # 依然需要分组
5、 compile()可以将一个长的正则表达式进行预加载,方便后面的使用
python
obj = re.compile(r'\d{3}') # 将正则表达式编译为一个正则表达式对象,规则要匹配的是3个数字
ret = obj.search('abc123eeee') # 正则表达式对象调用search,参数为待匹配的字符串
print(ret.group()) # 结果:123
6、正则表达式中的内容如何单独提取
可以通过分组对正则表达式的内容进行进一步的筛选
python
单独获取到正则表达式中的具体内容可以给分组取名字
s = """
<div class='西游记'><span id='10010'>中国联通</span><div>
"""
obj = re.compile(r"<span id='(?P<id>\d+)'>(?P<name>\w+)</span>",re.S)
result = obj.search(s)
print(result.group()) # 结果:<span id='10010'>中国联通</span>
print(result.group("id")) # 结果:10010 # 获取id组的内容
print(result.group("name")) # 结果: 中国联通 获取name组的内容
使用案例:
使用finditer的效果:
使用findall的效果:
案例代码:
python
import re
# findall:匹配字符串中所有的符合正则表达式的内容
list = re.findall(r"\d+","我的电话号码是:10086,她的电话是123456")
print(list)
# finditer:匹配字符串中所有的符合正则表达式的内容,并返回一个迭代器,从迭代器中拿到内容需要 .group()
iter = re.finditer(r"\d+","我的电话号码是:10086,她的电话是123456")
for i in iter:
# print(iter)
# print(i)
print(i.group()) # 获取匹配到的内容
# search:匹配字符串中第一个符合正则表达式的内容,找到返回一个对象,没有找到返回None,search全文匹配
s = re.search(r"\d+","我的电话号码是:10086,她的电话是123456")
print(s.group())
# match:匹配字符串时从头匹配
# m = re.match(r"\d+","我的电话号码是:10086,她的电话是123456")
# print(m.group())
# 预加载正则表达式,可以重复调用
pattern = re.compile(r"\d+")
list = pattern.findall("我的电话号码是:520522,她的电话是123456")
print(list)
iter = pattern.finditer("我的电话号码是:520520,她的电话是123456")
for i in iter:
print(i.group())
s = """
<div class='天龙八部'><span id='1'>萧峰</span><div>
<div class='三国演义'><span id='2'>曹操</span><div>
<div class='庆余年'><span id='3'>范闲</span><div>
<div class='射雕英雄'><span id='4'>郭靖</span><div>
<div class='熊出没'><span id='5'>光头强</span><div>
"""
# re .S 忽略换行符(让.匹配换行符)
pattern = re.compile(r"<div class='(?P<class>.*?)'><span id='(?P<id>.*?)'>(?P<name>.*?)</span><div>",re.S)
# list = pattern.findall(s)
list = pattern.finditer(s)
for i in list:
# print(i)
print(i.group("class"),i.group("id"),i.group("name"))