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


推荐阅读
  • 最近团队在部署DLP,作为一个技术人员对于黑盒看不到的地方还是充满了好奇心。多次咨询乙方人员DLP的算法原理是什么,他们都以商业秘密为由避而不谈,不得已只能自己查资料学习,于是有了下面的浅见。身为甲方,虽然不需要开发DLP产品,但是也有必要弄明白DLP基本的原理。俗话说工欲善其事必先利其器,只有在懂这个工具的原理之后才能更加灵活地使用这个工具,即使出现意外情况也能快速排错,越接近底层,越接近真相。根据DLP的实际用途,本文将DLP检测分为2部分,泄露关键字检测和近似重复文档检测。 ... [详细]
  • 使用Pandas高效读取SQL脚本中的数据
    本文详细介绍了如何利用Pandas直接读取和解析SQL脚本,提供了一种高效的数据处理方法。该方法适用于各种数据库导出的SQL脚本,并且能够显著提升数据导入的速度和效率。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • dotnet 通过 Elmish.WPF 使用 F# 编写 WPF 应用
    本文来安利大家一个有趣而且强大的库,通过F#和C#混合编程编写WPF应用,可以在WPF中使用到F#强大的数据处理能力在GitHub上完全开源Elmis ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 解决Python中 'NoneType' 对象无属性 'find_all' 错误
    本文详细探讨了在Python编程中遇到的常见错误——'NoneType'对象没有属性'find_all',并深入分析其原因及解决方案。通过理解find_all函数的工作原理和常见用法,帮助读者避免类似问题。 ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • Python第三方库安装的多种途径及注意事项
    本文详细介绍了Python第三方库的几种常见安装方法,包括使用pip命令、集成开发环境(如Anaconda)以及手动文件安装,并提供了每种方法的具体操作步骤和适用场景。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 本文介绍了在Windows环境下使用pydoc工具的方法,并详细解释了如何通过命令行和浏览器查看Python内置函数的文档。此外,还提供了关于raw_input和open函数的具体用法和功能说明。 ... [详细]
  • 深入解析JMeter中的JSON提取器及其应用
    本文详细介绍了如何在JMeter中使用JSON提取器来获取和处理API响应中的数据。特别是在需要将一个接口返回的数据作为下一个接口的输入时,JSON提取器是一个非常有用的工具。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • Ihaveastringwithquotesaroundthepathasfollows:我在路径周围有一个带引号的字符串,如下所示:C:\ProgramFiles(x ... [详细]
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社区 版权所有