正则表达式
1 简介
正则表达式 是一些有字符和特殊符号组成的字符串,他描述了模式的重复或者表述多个字符,于是正则表达式能够按照魔种模式匹配一系列有相似特征的字符。
在Python开发语言中re模块来支持正则表达式。
2 常见的正则表达式符号
常见的正则表达式符号如下表所示:
表示方法 | 描述 | 示例 |
literal | 匹配文本字符串literal | foo |
re1|re2 | 匹配表达式re1或者re2 | foo|bar |
. | 匹配任何字符(除\n之外) | b.b |
^ | 匹配字符串起始部分 | ^Dear |
$ | 匹配字符串种植部分 | /bin/*sh$ |
* | 匹配0次或者多次前面出现的正则表达式 | [A-Za-z0-9]* |
+ | 匹配1次或者多次前面出现的正则表达式 | [a-z]+\.com |
? | 匹配0次或者1次前面出现的正则表达式 | goo? |
{N} | 匹配N次前面出现的正则表达式 | [0-9]{5-9} |
{M,N} | 匹配M-N次前面出现的正则表达式 | [0-9]{5,9} |
[...] | 匹配来自字符集的任意字符 | [aeiou] |
[..x-y..] | 匹配x-y范围中的任意一字符 | [0-9],[A-Za-z] |
[^...] | 不匹配此字符集中出现的任何一个字符,包括魔衣范围的字符 | [^aeiou] |
(*|+|?|{})? | 匹配上面明矾出现/重复出现的非贪婪版本(*、+、?、{}) | .*?[a-z] |
(...) | 匹配封闭的正则表达式,然后另存为子组 | ([0-9]{2})?,f(oo|u)bar |
\d | 匹配任何十进制数字 | data\d+.txt |
\w | 匹配任何字母数字字符 | [A-Za-z]\w+ |
\s | 匹配任何空字符 | of\sthe |
\b | 匹配任何单词边界 | \bThe\b |
3 Python的正则表达式模块
python使用re模块来支持正则表达式,re为标准的库模块,第三方模块regex提供了与标准库re
模块兼容的 API 接口,同时,还提供了更多功能和更全面的 Unicode 支持。本篇文章主要介绍re标准库的使用,re中文文档
3.1 常见的正则表达式属性
函数方法 | 说明 |
complie(pattern,flags=0) | 使用任何可选的标记来编译正则表达式,然后返回一个正则表达式对象 |
match(pattern,string,flags=0) | 使用带有可选的标记的正则表达式的模式来匹配字符串,如果匹配成功,就返回匹配对象;失败则返回None |
search(pattern,string,flags=0) | 使用可选标记搜索字符串中第一次出现的正则表达式模式。匹配成功则返回匹配对象,匹配失败返回None |
findall(pattern,string[,flags]) | 查找字符串中的所有出现的正则表达式模式,并返回一个匹配列表 |
finditer(pattern,string[,flags]) | 与findall()函数相同,但返回的不是一个列表,而是一个迭代器,对于每一次匹配,迭代器都返回一个匹配对象 |
split(pattern,string,max=0) | 根据正则表达式模式分隔符,split函数将字符串分割为列表,憨厚返回成功匹配的列表,分隔最大操作max次 |
sub(pattern,repl,sting,count=0) | 使用repl替换所有正则表达式模式在字符串中出现的位置,除非定义count,否则就将替换所有出现的位置 |
purge() | 清楚隐式编译的正则表达式模式 |
常用的匹配方法 | |
group(num=0) | 返回整个匹配对象,或者编号为num的特定子组 |
groups(default=None) | 返回一个包含匹配子组的元组,匹配失败返回空 |
3.2 示例
1 #导入正则表达式模块 2 import re 3 #demo1 匹配foo并输出结果,match用于从字符串其实部分匹配 4 m = re.match('foo','foo123') 5 res = m.group() 6 print('demo1.1:',res) 7 #匹配失败m为空,当m为None时无group属性 8 m = re.match('foo','bar') 9 if m is not None:m.group() 10 print('demo1.2:',m) 11 12 #demo2 匹配失败返回none,search用于从左往右搜索匹配成功返回结果否则 13 m = re.search('foo1','123foo123') 14 if m is not None: 15 res1 = m.group() 16 print('demo2:',res1) 17 18 data = '1234567890asdfghjklfoogreenred' 19 m = re.search('green',data) 20 if m is not None : m.group() 21 print('demo2:',m.group()) 22 23 #demo3 匹配多个字符串,如果第一个字符串匹配成功则返回匹配结果,否则使用下一个字符串进行匹配 24 bt1 = 'green1|fot|asd' 25 m = re.search(bt1,data) 26 if m is not None : m.group() 27 print('demo3:',m.group()) 28 29 #demo4 匹配任意一个字符 30 31 m = re.search('.',data) 32 n = m.group() 33 print('demo4:',n) 34 #demo5 35 m = re.search('.*',data) 36 n = m.group() 37 print('demo5:',n) 38 #demo6 匹配电子邮件 39 userInfo = 'userNmae:Jhon snow;e-Mail:Jhon_snow@qq.com' 40 regular = '[\w\.-]+@[\w\.-]+(\.[\w]+)+' 41 m = re.search(regular,userInfo) 42 print('demo6:',m.group())
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库