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

Python正则表达式(PythonRegEx)

Python正则表达式快速参考常用函数:re.match():从字符串的起始位置匹配一个正则表达式。re.search():扫描整个字符串并返回第一个成功的匹配。re.s

Python正则表达式(Python RegEx)

Python正则表达式

目录
  • Python正则表达式
    • 快速参考
    • 函数详解
      • match()
      • search()
      • 捕获和分组
      • Match对象
      • sub()
      • compile()
      • findall()
      • finditer()
      • split()
    • 参考博客与示例代码

快速参考

常用函数:

re.match():从字符串的起始位置匹配一个正则表达式。

re.search():扫描整个字符串并返回第一个成功的匹配。

re.sub():用于替换字符串中的匹配项。

re.compile():用于编译正则表达式,生成一个正则表达式(Pattern)对象。供match()和search()这两个函数使用。

re.findAll():在字符串中找到正则表达式所匹配的所有子串,并返回一个列表。

re.finditer():在字符串中找到正则表达式所匹配的所有子串,并返回一个迭代器。

re.split():split 方法按照能够匹配的子串将字符串分割后返回列表。

元字符:具有特殊含义的字符

1666336822622

特殊序列:特殊序列指的是后跟下表中的某个字符,拥有特殊含义。

1666336796466

集合:集合(Set)是一对方括号 [] 内的一组字符,具有特殊含义

1666336893047

正则表达式修饰符

1666338644369

函数详解

match()

re.match(): 从字符串的起始位置(开头)匹配一个正则表达式,匹配成功返回一个Match对象,匹配失败返回None。

re.match(pattern, string, flags=0)
# pattern:正则表达式;string:字符串;flags:正则表达式修饰符

示例:

_str = "https://www.baidu.com/"
print(re.match("https", _str))
print(re.match("baidu", _str))

结果图:

1666338757337

re.search():扫描整个字符串来匹配正则表达式,如果匹配成功,则返回第一个匹配成功的Match对象,匹配失败则返回None。

re.search(pattern,string,flags=0)
# pattern:正则表达式;string:字符串;flags:正则表达式修饰符

示例:

_str = "https://www.baidu.com/"
print(re.search("baidu", _str))
print(re.search("goole", _str))

结果图:

1666339370679

捕获和分组

示例:

_str = "Cats are smarter than dogs"
# r:字符串为非转义的原始字符串 ():捕获和分组 .:除了换行符的所有字符 *:零次或者多次出现
# (.*)是第一个分组,.*表示匹配除了换行符之外的所有字符;(.*?)是第二个分组,.*后面的?代表非贪婪模式,只匹配符合条件的最少的字符
# 最后一个.*不是分组,不会计入匹配结果;|表示两者任一
# re.M:多行匹配,影响^和$;re.I:大小写不敏感
# 匹配的正则表达式中的空格对结果影响很大
matchObject = re.match(r"(.*) are (.*?) .*", _str, re.M | re.I)
if matchObject:
    print(matchObject.groups())
    print(matchObject.group())
    print(matchObject.group(1))
    print(matchObject.group(2))

结果截图:

1666340200947

groups是包含分组匹配项的元组;group()或者group(0)是整个正则表达式的匹配项;group(1)和group(2)分别是两个分组的匹配项;当调用group(3)时会报错,因为没有第三个分组

Match对象

_str = "https://www.baidu.com/"
_result = re.match("https", _str)
print(_result)
print(_result.span())
print(_result.start())
print(_result.end())
print(_result.group())

1666588115349

sub()

re.sub():用于替换字符串中正则表达式的匹配项。

re.sub(pattern, repl, string, count=0, flags=0)
# pattern:正则表达式;repl:替换的字符串或者函数;string:字符串;
# count:最大替换次数,默认0代表替换所有匹配正则表达式;flags:正则表达式修饰符

示例:

_phOne= "2004-959-559 # 这是一个国外电话号码"

# 删除字符串中的Python注释
_phOne= re.sub(r"#.*$", "", _phone)
print(_phone)
# 删除字符串中的-
_num = re.sub(r"D", "", _phone)
print(_num)
# 删除字符串中的-
_num = re.sub(r"-", "", _phone)
print(_num)
# 删除字符串中第一个-
_num = re.sub(r"-", "", _phone, 1)
print(_num)

结果图:

1666339791448

示例(repl参数是一个函数):

# 将字符串中的匹配的数字*2
def doubleNum(matched):
    _value = int(matched.group("value"))
    return str(_value * 2)


_str = "cxk666cxk456cxk250"
# 分组匹配
_result = re.sub(r"(?Pd+)", doubleNum, _str)
print(_result)

结果图:

1666339920168

compile()

compile()函数用于编译正则表达式,生成一个正则表达式对象(RegexObject) ,供match()和search()这两个函数使用。

re.compile(pattern[, flags])
# pattern:正则表达式;flags:正则表达式修饰符

示例:

_str = "cxk666cxk456cxk250"
# re.compile函数,compile函数用于编译正则表达式,生成一个正则表达式对象
_pattern = re.compile(r"d+")  # 匹配至少一个数字
_result = _pattern.search(_str)
print(_result)

结果图:

1666348922399

findall()

findall():在字符串中找到正则表达式所匹配的所有子字符串并返回一个列表。如果有多个匹配模式,则返回元祖列表;如果没有找到匹配子串,则返回空列表。

findall(string[, pos[, endpos]])
# string:字符串;pos:可选参数,字符串的起始位置,默认为0;endpos:可选参数,字符串的结束位置,默认为字符串长度。

示例:

_str = "cxk666cxk456cxk250"
_pattern = re.compile(r"d+")  # 匹配至少一个数字
_result = _pattern.findall(_str)
print(_result)

结果图:

1666577047867

多个匹配模式示例:

_str = "cxk666cxk456cxk250"
_pattern = re.compile(r"([a-z]+)(d+)") #按小写字母和数字分开匹配
_result = _pattern.findall(_str)
print(_result)

结果图:

1666577465741

finditer()

finditer():在字符串中找到正则表达式所匹配的所有子串,并将结果作为一个迭代器返回。

re.finditer(pattern, string, flags=0)
# string:字符串;pattern:正则表达式;flags:正则表达式修饰符

示例:

# finditer
_str = "cxk666cxk456cxk250"
_iter = re.finditer(r"d+", _str)
for _it in _iter:
    print(_it.group())

结果图:

1666578148516

split()

split() 方法按照能够匹配的子串将字符串分割后返回列表。注意:是分割,而不是取某一部分

re.split(pattern, string[, maxsplit=0, flags=0])
# pattern:正则表达式;string:字符串;maxsplit:分隔次数,默认为 0,不限制次数;flags:正则表达式修饰符

示例:

_str = "cxk sing jump rap basketball"
_result = re.split(r"(S+ )", _str)
print(_result)

结果图:

1666581711027

参考博客与示例代码

示例代码:https://gitee.com/mr-wildfire/PythonRegExDemo/

参考博客:

​ 感谢:Python 正则表达式 | 菜鸟教程 (runoob.com)

​ 感谢:Python RegEx (w3school.com.cn)


推荐阅读
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • 最近团队在部署DLP,作为一个技术人员对于黑盒看不到的地方还是充满了好奇心。多次咨询乙方人员DLP的算法原理是什么,他们都以商业秘密为由避而不谈,不得已只能自己查资料学习,于是有了下面的浅见。身为甲方,虽然不需要开发DLP产品,但是也有必要弄明白DLP基本的原理。俗话说工欲善其事必先利其器,只有在懂这个工具的原理之后才能更加灵活地使用这个工具,即使出现意外情况也能快速排错,越接近底层,越接近真相。根据DLP的实际用途,本文将DLP检测分为2部分,泄露关键字检测和近似重复文档检测。 ... [详细]
  • python开发mysql:单表查询&多表查询
    一单表查询,以下是表内容二多表查询,一下是表内容三总结&表创建过程单 ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • Ihaveastringwithquotesaroundthepathasfollows:我在路径周围有一个带引号的字符串,如下所示:C:\ProgramFiles(x ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 在编译BSP包过程中,遇到了一个与 'gets' 函数相关的编译错误。该问题通常发生在较新的编译环境中,由于 'gets' 函数已被弃用并视为安全漏洞。本文将详细介绍如何通过修改源代码和配置文件来解决这一问题。 ... [详细]
  • java文本编辑器,java文本编辑器设计思路
    java文本编辑器,java文本编辑器设计思路 ... [详细]
  • 本文将详细介绍Nose这一非标准库的Python测试框架,它虽然不是Python官方发行版的一部分,但与unittest框架紧密相关,旨在通过简化测试流程来提升开发效率。 ... [详细]
  • 本文基于《Linux命令行与Shell脚本编程大全》第三版的第十一章内容,探讨了如何构建基本的Shell脚本,包括命令组合、脚本创建、消息显示、变量使用、输入输出重定向、管道、数学运算及脚本退出等方面的知识。 ... [详细]
  • 本文介绍如何在Mac和Windows操作系统中配置Sublime Text以直接运行PHP文件的方法,包括环境变量的设置及Sublime Text构建系统的创建。 ... [详细]
  • 本文详细总结了Java中String类的构造函数及常用方法,包括构造函数的多种形式和方法的具体应用,旨在帮助开发者更好地理解和使用String类。 ... [详细]
author-avatar
龙love猫
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有