python十五python内置库——正则表达式re
1. 正则表达式
1.1 什么是正则表达式
- 正则表达式就是记录文本规则的代码
- 可以查找操作符合某些复杂规则的字符串
1.2 使用场景
- 处理字符串
- 处理日志
1.3 在 python 中使用正则表达式
- 把正则表达式作为模式字符串
- 正则表达式可以使用原生字符串来表示
- 原生字符串需要在字符串前方加上
r'string'
# 匹配字符串是否以 gaopangpang_ 开头
r'gaopangpang_\w '
2. 使用 re 模块实现正则表达式操作
2.1 正则表达式对象转换
compile()
:将字符串转换为正则表达式对象- 需要多次使用这个正则表达式的场景
#导入re模块
import re
'''
prog:正则对象,可以直接调用匹配、替换、分割的方法,不需要再传入正则表达式
pattern:正则表达式
'''
prog = re.compile(pattern)
示例:
import re
#匹配包含高胖胖的字符串
pattern=r"gaopangpang"
#将正则表达式转换成正则表达式对象
prong=re.compile(pattern)
print(type(prong))
#打印内容:<class 're.Pattern'>
#已经转成正则表达式对象
2.2 匹配字符串
match()
:从字符串的开始处进行匹配search()
:在整个字符串中搜索第一个匹配的值findall()
:在整个字符串中搜索所有符合正则表达式的字符串,返回列表
import re
'''
pattern: 正则表达式
string: 要匹配的字符串
flags: 可选,控制匹配方式
- A:只进行 ASCII 匹配
- I:不区分大小写
- M:将 ^ 和 $ 用于包括整个字符串的开始和结尾的每一行
- S:使用 (.) 字符匹配所有字符(包括换行符)
- X:忽略模式字符串中未转义的空格和注释
'''
re.match(pattern, string, [flags])
re.search(pattern, string, [flags])
re.findall(pattern, string, [flags])
示例1:match
从字符串的开始处进行匹配
import re
#匹配包含以gao开头的字符串
pattern=r"gao\w "
#将正则表达式转换成正则表达式对象
s1="Gaopangpang is a nice guy."
match1=re.match(pattern,s1,re.I)
print(match1)
print(f"匹配开始位置:{match1.start()}")
print(f"匹配结束位置:{match1.end()}")
print(f"匹配位置的元祖:{match1.span()}")
print(f"要匹配的字符串:{match1.string}")
print(f"匹配的数据:{match1.group()}")
"""
打印结果:
<re.Match object; span=(0, 11), match='Gaopangpang'>
匹配开始位置:0
匹配结束位置:11
匹配位置的元祖:(0, 11)
要匹配的字符串:Gaopangpang is a nice guy.
匹配的数据:Gaopangpang
"""
s2="Everybody like gaopangpang."
match2=re.match(pattern,s2,re.I)
print(match2)
"""
打印结果:
None
"""
示例2:search
在整个字符串中搜索第一个匹配的值
import re
#匹配包含以gao开头的字符串
pattern=r"gao\w "
#将正则表达式转换成正则表达式对象
s1="Gaopangpang is a nice guy."
match1=re.search(pattern,s1,re.I)
print(match1)
print(f"匹配开始位置:{match1.start()}")
print(f"匹配结束位置:{match1.end()}")
print(f"匹配位置的元祖:{match1.span()}")
print(f"要匹配的字符串:{match1.string}")
print(f"匹配的数据:{match1.group()}")
"""
打印结果:
<re.Match object; span=(0, 11), match='Gaopangpang'>
匹配开始位置:0
匹配结束位置:11
匹配位置的元祖:(0, 11)
要匹配的字符串:Gaopangpang is a nice guy.
匹配的数据:Gaopangpang
"""
s2="Everybody like gaopangpang. Gaopangpang is very happy."
match2=re.search(pattern,s2,re.I)
print(match2)
print(f"匹配开始位置:{match2.start()}")
print(f"匹配结束位置:{match2.end()}")
print(f"匹配位置的元祖:{match2.span()}")
print(f"要匹配的字符串:{match2.string}")
print(f"匹配的数据:{match2.group()}")
"""
打印结果:
<re.Match object; span=(15, 26), match='gaopangpang'>
匹配开始位置:15
匹配结束位置:26
匹配位置的元祖:(15, 26)
要匹配的字符串:Everybody like gaopangpang. Gaopangpang is very happy.
匹配的数据:gaopangpang
"""
示例3:findall
在整个字符串中搜索所有符合正则表达式的字符串,返回列表
import re
#匹配包含以gao开头的字符串
pattern=r"gao\w "
s2="Everybody like gaopangpang. Gaopangpang is very happy."
match2=re.findall(pattern,s2,re.I)
print(match2)
"""
打印结果:
['gaopangpang', 'Gaopangpang']
"""
2.3 替换字符串
sub()
:实现字符串替换
import re
'''
pattern:正则表达式
repl:要替换的字符串
string:要被查找替换的原始字符串
count:可选,表示替换的最大次数,默认值为 0,表示替换所有匹配
flags:可选,控制匹配方式
'''
re.sub(pattern, repl, string, [count], [flags])
示例:
import re
#匹配手机号码
pattern=r"1[34578]\d{9}"
s1="中奖号码联系电话:13200000001"
match2=re.sub(pattern,'1XXXXXXXXXX',s1)
print(match2)
"""
打印结果:
中奖号码联系电话:1XXXXXXXXXX
"""
2.4 分割字符串
split()
:根据正则表达式分割字符串,返回列表
import re
'''
pattern:正则表达式
string:要匹配的字符串
maxsplit:可选,表示最大拆分次数
flags:可选,控制匹配方式
'''
re.split(pattern, string, [maxsplit], [flags])
示例:
import re
#匹配分割符
pattern=r"[?|&]"
#待分割的网址
url="https://www.百度.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=monline_3_dg&wd=哈哈&fenlei=256&rsv_pq=99fde4c600070362&rsv_t=a8ffxlvPLgOOTFba0r80f2npHbE0bml8+n07CwmlCgjB2dkIrgGxgUfSM3lSG/+tAlaU&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_sug3=6&rsv_sug1=2&rsv_sug7=101&rsv_sug2=0&rsv_btype=t&inputT=398&rsv_sug4=1802"
result=re.split(pattern,url)
print(result)
"""
打印结果:
['https://www.百度.com/s', 'ie=utf-8', 'f=8', 'rsv_bp=1', 'rsv_idx=1', 'tn=monline_3_dg', 'wd=哈哈', 'fenlei=256', 'rsv_pq=99fde4c600070362', 'rsv_t=a8ffxlvPLgOOTFba0r80f2npHbE0bml8+n07CwmlCgjB2dkIrgGxgUfSM3lSG/+tAlaU', 'rqlang=cn', 'rsv_enter=1', 'rsv_dl=tb', 'rsv_sug3=6', 'rsv_sug1=2', 'rsv_sug7=101', 'rsv_sug2=0', 'rsv_btype=t', 'inputT=398', 'rsv_sug4=1802']
"""
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhhbcegb
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22 -
excel打印预览压线压字怎么办
PHP中文网 06-22