热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python小记正则

文章目录修饰符模式特别字符特殊表达式re模块函数compile()search()match()findall()split()sub()和subn()sub高级用法findite

文章目录

  • 修饰符 / 模式
  • 特别字符
  • 特殊表达式
  • re模块函数
    • compile()
    • search()
    • match()
    • findall()
    • split()
    • sub() 和 subn()
    • sub 高级用法
    • finditer()
  • 贪婪匹配
  • macth 一些出现场景
    • group()
    • groups()
    • groupdict()




修饰符 / 模式

修饰符描述
re.I匹配对大小写不敏感
re.L做本地化识别匹配
re.M多行匹配,影响^&
re.S使.包括换行在内的所有字符
re.U根据Unicode字符集解析字符。
影响 \w, \W, \b, \B
re.X该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。



特别字符

字符说明
$匹配结尾
^匹配开头
+此前表达式一次多次
?此前表达式零次一次
*此前表达式零次多次
.匹配任意字符,除换行
|两项之间取
a|b :表示匹配 ab
\转义字符。
要匹配$表达式应为 \$
()子表达式、组
{}限定符
\b匹配一个边界
\B匹配一个非边界
\w匹配字母和数字
\W匹配非字母和数字
\d匹配数字
\D匹配非数字
\s匹配空白。[\t\n\r\f\v]
\S匹配非空。
\A匹配字符串的开始
\Z匹配字符串的结束,
如有换行,只匹配到换行前的结束字符【常用】
\z匹配字符串结束
\G匹配最后匹配完成的位置

特殊表达式

表达式说明示例
(?#…)注释
[…]字符组。[a-zA-z]:匹配字母
[hdjr]:匹配h,d, jr
[\u4e00-\u9fa5]:匹配中文
[^…]不在字符组的字符。[^abc]:匹配除了a, b, c外的
{n[, m]}匹配n次(或n~m次)6{6,8}:匹配'6'6~8次
a | ba|b:匹配 ab
(re)匹配括号内的表达式,也表示一个组(http)://:匹配http
(?P…)命名组
(?P=name)调用已匹配的命名组
/number通过序号调用已匹配的组
(?:re)类似(re),但不表示组
(?imx:re)在括号中使用 i,m,x可选标志
(?-imx:re)在括号中不使用 i, m,x可选标志

手机端显示这个表格肯定辣眼睛,截个图放这。
在这里插入图片描述



re模块函数



compile()

将正则语句编译成Pattern对选
返回值: Pattern 对象

语法:

pt = re.compile(soucre,filename,mode[, flags[, dont_inherit]])

参数:

  • source :字符串或AST对象
  • filename:代码文件名(如果从文件读取代码的话
  • mode:编译代码的种类,可为 exec,eval,single

pt = re.compile(r'[aeiou]+$')
pt.findall('hello world')



search()

返回值: 第一个成功的匹配(match对象) 或 None

语法:

re.search(pattern, string,flags=0
)

参数:

  • pattern:模板
  • string:待匹配字符串
  • flags:标志位【是否区分大小写、多行匹配…】

>>> re.search(r'hello', 'hello world')
<re.Match object; span&#61;(0, 5), match&#61;&#39;hello&#39;>

match对象&#xff1a;

  • .group() 返回匹配值
  • .groups()
  • .groupdict()
  • .span() 返回匹配位置
  • .start()
  • .end()



match()

从第一个字符开始匹配

返回值&#xff1a; match对象 或 None

re.match(pattern, string,flags&#61;0
)

参数&#xff1a;

  • pattern&#xff1a;模板
  • string&#xff1a;待匹配字符串
  • flags&#xff1a;标志位【是否区分大小写、多行匹配…】

match对象&#xff1a;

  • .group() 返回匹配值
  • .groups()
  • .groupdict()
  • .span() 返回匹配位置
  • .start()
  • .end()



findall()

返回值&#xff1a; 所有匹配结果列表 或 元组&#xff08;有组的话&#xff09;

语法&#xff1a;

re.findall(pattern,string,flags&#61;0)

参数&#xff1a;

  • pattern&#xff1a;模板
  • string&#xff1a;待匹配字符串
  • flags&#xff1a;标志位【是否区分大小写、多行匹配…】

>>> re.findall(&#39;hello\d?&#39;, &#39;e hello2 world hello1&#39;)
[&#39;hello2&#39;, &#39;hello1&#39;]



split()

将字符串按正则规则切分
返回值&#xff1a; 返回分隔后的列表

语法&#xff1a;

re.split(pattern,string,maxsplit&#61;0,falgs&#61;0)

参数&#xff1a;

  • pattern&#xff1a;模板
  • string&#xff1a;待匹配字符串
  • maxsplit&#xff1a;最大分割数
  • flags&#xff1a;标志位【是否区分大小写、多行匹配…】

print(re.split(r&#39;\d{2,4}&#39;, &#39;hello2future666HHHHHH897LLL12beloved&#39;))
# Output
&#39;&#39;&#39;
[&#39;hello2future&#39;, &#39;HHHHHH&#39;, &#39;LLL&#39;, &#39;beloved&#39;]
&#39;&#39;&#39;




sub() 和 subn()

搜索和替换
返回值&#xff1a; 替换后的字符串 | subn: (替换后字符串&#xff0c;替换次数)

语法&#xff1a;

re.sub(pattern,repl,string[, count])

参数&#xff1a;

  • pattern&#xff1a;匹配模板
  • repl&#xff1a;替换模板。可以是函数
  • string&#xff1a;原字符串
  • count&#xff1a;最大替换次数

print(re.sub(&#39;666&#39;, &#39;999&#39;, &#39;祝你666&#xff0c; 祝他666&#39;))
print(re.subn(&#39;666&#39;, &#39;999&#39;, &#39;祝你666&#xff0c; 祝他666&#39;))
# Output
&#39;&#39;&#39;
祝你999&#xff0c; 祝他999
(&#39;祝你999&#xff0c; 祝他999&#39;, 2)
&#39;&#39;&#39;


sub 高级用法

def ch(value):return str(len(value.group()))print(re.sub(&#39;[hH]&#43;&#39;, # patternch, # repl&#39;hhhhhhhh, IamGreat, HHHHH, ni666, hhhhhhh&#39;))
# Output
&#39;&#39;&#39;
8, IamGreat, 5, ni666, 7
&#39;&#39;&#39;




finditer()

findall类似

返回值&#xff1a; iterator 类。每个元素是一个 match 对象

语法&#xff1a;

re.finditer(pattern,string,flags&#61;0)



贪婪匹配

正则匹配默认为贪婪模式&#xff1a;

st &#61; &#39;Python ython thon hon on&#39;
pt &#61; re.compile(r&#39;P.&#43;n&#39;)
print(pt.findall(st))
# Output
&#39;&#39;&#39;
[&#39;Python ython thon hon on&#39;]
&#39;&#39;&#39;

# 并不是匹配到 Python 就结束

  • 非贪婪
  • ‘数量’ 后边加个问号?
  • ‘数量’&#xff1a;&#43;&#xff0c;*

st &#61; &#39;Python ython thon hon on&#39;
pt &#61; re.compile(r&#39;P.&#43;?n&#39;)
print(pt.findall(st))
# Output
&#39;&#39;&#39;
[&#39;Python&#39;]
&#39;&#39;&#39;




macth 一些出现场景

方法、属性&#xff1a;

  • group()
  • groups()
  • groupdict()
  • span()
  • start()
  • end()



group()


  • 只有一个组&#xff0c;取值时&#xff1a;match.group(0)
  • span: 匹配到的位置信息

string &#61; &#39;hello world, hello python&#39;
pt &#61; re.compile(r&#39;hello&#39;)
result &#61; pt.search(string)
print(result, # result.span(), # (0, 5)result.start(),# 0result.end(), # 5result.group(),# hellosep&#61;&#39;\n&#39;)
# Output
&#39;&#39;&#39;

(0, 5)
0
5
hello
&#39;&#39;&#39;




groups()


  • 有多个组
  • 想要看按组匹配的结构还得 match.groups()

string &#61; &#39;hello world, hello python&#39;
result &#61; re.search(r&#39;(ello).&#43;(thon)&#39;,string
)
print(result,result.span(), # (1, 25)result.start(), # 1result.end(), # 25result.groups(), # (&#39;ello&#39;, &#39;thon&#39;)sep&#61;&#39;\n&#39;)
# Output
&#39;&#39;&#39;

(1, 25)
1
25
(&#39;ello&#39;, &#39;thon&#39;)
&#39;&#39;&#39;


groupdict()


  • 当给组命名时&#xff0c;可以用groupdict()返回字典
  • 或者也可以用 groups()返回元组

string &#61; &#39;hello world, hello python&#39;
result &#61; re.search(r&#39;(?Pello).&#43;(?Pthon)&#39;,string
)
print(result,result.span(), # (1, 25)result.start(), # 1result.end(), # 25result.groups(), # (&#39;ello&#39;, &#39;thon&#39;)result.groupdict(),# {&#39;halou&#39;: &#39;ello&#39;, &#39;Py&#39;: &#39;thon&#39;}sep&#61;&#39;\n&#39;)
# Output
&#39;&#39;&#39;

(1, 25)
1
25
(&#39;ello&#39;, &#39;thon&#39;)
{&#39;halou&#39;: &#39;ello&#39;, &#39;Py&#39;: &#39;thon&#39;}
&#39;&#39;&#39;


推荐阅读
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • 深入了解 Windows 窗体中的 SplitContainer 控件
    SplitContainer 控件是 Windows 窗体中的一种复合控件,由两个可调整大小的面板和一个可移动的拆分条组成。本文将详细介绍其功能、属性以及如何通过编程方式创建复杂的用户界面。 ... [详细]
  • dotnet 通过 Elmish.WPF 使用 F# 编写 WPF 应用
    本文来安利大家一个有趣而且强大的库,通过F#和C#混合编程编写WPF应用,可以在WPF中使用到F#强大的数据处理能力在GitHub上完全开源Elmis ... [详细]
  • 本文探讨了在地理信息系统中,如何通过图层数据获取任意两条道路的交叉点坐标及其名称。文中详细介绍了实现方法和相关技术细节。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 使用Pandas高效读取SQL脚本中的数据
    本文详细介绍了如何利用Pandas直接读取和解析SQL脚本,提供了一种高效的数据处理方法。该方法适用于各种数据库导出的SQL脚本,并且能够显著提升数据导入的速度和效率。 ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • Python第三方库安装的多种途径及注意事项
    本文详细介绍了Python第三方库的几种常见安装方法,包括使用pip命令、集成开发环境(如Anaconda)以及手动文件安装,并提供了每种方法的具体操作步骤和适用场景。 ... [详细]
  • 在本教程中,我们将深入探讨如何使用 Python 构建游戏的主程序模块。通过逐步实现各个关键组件,最终完成一个功能完善的游戏界面。 ... [详细]
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
author-avatar
手机用户2502922713
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有