热门标签 | 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;


推荐阅读
  • 现在越来越多的人使用IntelliJIDEA,你是否想要一个好看的IDEA主题呢?本篇博客教你如何设置一个美美哒IDEA主题,你也可以根据 ... [详细]
  • Python正则表达式(Python RegEx)
    Python正则表达式快速参考常用函数:re.match():从字符串的起始位置匹配一个正则表达式。re.search():扫描整个字符串并返回第一个成功的匹配。re.s ... [详细]
  • Lua字符串1.字符串常见形式字符串或串(String)是由数字、字母、下划线组成的一串字符。Lua语言中字符串可以使用以下三种方式来表示:•单引号间的一串字符。 ... [详细]
  • 本文简要介绍了如何使用 Python Elasticsearch DSL 进行基本和高级查询,包括连接 Elasticsearch、执行简单和复杂查询、聚合、排序及分页等。 ... [详细]
  • 我在尝试将组合框转换为具有自动完成功能时遇到了一个问题,即页面上的列表框也被转换成了自动完成下拉框,而不是保持原有的多选列表框形式。 ... [详细]
  • 本文详细探讨了在Windows 98环境下安装Apache 1.3.9、JServ、GNUJSP 1.0、JDK 1.2.2及JSDK 2.0后遇到的中文显示问题,并提供了多种有效的解决方案。 ... [详细]
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • MITM(中间人攻击)原理及防范初探(二)
    上一篇文章MITM(中间人攻击)原理及防范初探(一)给大家介绍了利用ettercap进行arp欺骗及劫持明文口令,后来我发现好友rootoorotor的文章介绍比我写的更透彻,所以基础利用大家可以参看 ... [详细]
  • 本文详细介绍了JQuery Mobile框架中特有的事件和方法,帮助开发者更好地理解和应用这些特性,提升移动Web开发的效率。 ... [详细]
  • 问题场景用Java进行web开发过程当中,当遇到很多很多个字段的实体时,最苦恼的莫过于编辑字段的查看和修改界面,发现2个页面存在很多重复信息,能不能写一遍?有没有轮子用都不如自己造。解决方式笔者根据自 ... [详细]
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
  • 本文详细介绍了如何利用 Bootstrap Table 实现数据展示与操作,包括数据加载、表格配置及前后端交互等关键步骤。 ... [详细]
  • 本文详细介绍了Elasticsearch中的分页查询机制,包括基本的分页查询流程、'from-size'浅分页与'scroll'深分页的区别及应用场景,以及两者在性能上的对比。 ... [详细]
  • Java中字符串截取方法详解
    本文详细介绍了Java中常用的字符串截取方法及其应用场景,帮助开发者更好地理解和使用这些方法。 ... [详细]
  • Spring Boot与Graylog集成实现微服务日志聚合与分析
    本文介绍了如何在Graylog中配置输入源,并详细说明了Spring Boot项目中集成Graylog的日志聚合和分析方法,包括logback.xml的多环境配置。 ... [详细]
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社区 版权所有