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


推荐阅读
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 本文详细介绍了Python中正则表达式和re模块的使用方法。首先解释了转义符的作用,以及如何在字符串中包含特殊字符。然后介绍了re模块的功能和常用方法。通过学习本文,读者可以掌握正则表达式的基本概念和使用技巧,进一步提高Python编程能力。 ... [详细]
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • Python教学练习二Python1-12练习二一、判断季节用户输入月份,判断这个月是哪个季节?3,4,5月----春 ... [详细]
  • 本文介绍了协程的概念和意义,以及使用greenlet、yield、asyncio、async/await等技术实现协程编程的方法。同时还介绍了事件循环的作用和使用方法,以及如何使用await关键字和Task对象来实现异步编程。最后还提供了一些快速上手的示例代码。 ... [详细]
  • 实现一个通讯录系统,可添加、删除、修改、查找、显示、清空、排序通讯录信息
    本文介绍了如何实现一个通讯录系统,该系统可以实现添加、删除、修改、查找、显示、清空、排序通讯录信息的功能。通过定义结构体LINK和PEOPLE来存储通讯录信息,使用相关函数来实现各项功能。详细介绍了每个功能的实现方法。 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • java布尔字段用is前缀_POJO类中布尔类型的变量都不要加is前缀详解
    前言对应阿里巴巴开发手册第一章的命名风格的第八条。【强制】POJO类中布尔类型的变量都不要加is前缀,否则部分框架解析会引起序列化错误。反例:定义为基本 ... [详细]
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社区 版权所有