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


推荐阅读
  • python模块之正则
    re模块可以读懂你写的正则表达式根据你写的表达式去执行任务用re去操作正则正则表达式使用一些规则来检测一些字符串是否符合个人要求,从一段字符串中找到符合要求的内容。在 ... [详细]
  • Python内置模块详解:正则表达式re模块的应用与解析
    正则表达式是一种强大的文本处理工具,通过特定的字符序列来定义搜索模式。本文详细介绍了Python内置的`re`模块,探讨了其在字符串匹配、验证和提取中的应用。例如,可以通过正则表达式验证电子邮件地址、电话号码、QQ号、密码、URL和IP地址等。此外,文章还深入解析了`re`模块的各种函数和方法,提供了丰富的示例代码,帮助读者更好地理解和使用这一工具。 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • java解析json转Map前段时间在做json报文处理的时候,写了一个针对不同格式json转map的处理工具方法,总结记录如下:1、单节点单层级、单节点多层级json转mapim ... [详细]
  • 在Effective Java第三版中,建议在方法返回类型中优先考虑使用Collection而非Stream,以提高代码的灵活性和兼容性。 ... [详细]
  • pypy 真的能让 Python 比 C 还快么?
    作者:肖恩顿来源:游戏不存在最近“pypy为什么能让python比c还快”刷屏了,原文讲的内容偏理论,干货比较少。我们可以再深入一点点,了解pypy的真相。正式开始之前,多唠叨两句 ... [详细]
  • Java中字符串截取方法详解
    本文详细介绍了Java中常用的字符串截取方法及其应用场景,帮助开发者更好地理解和使用这些方法。 ... [详细]
  • 目录预备知识导包构建数据集神经网络结构训练测试精度可视化计算模型精度损失可视化输出网络结构信息训练神经网络定义参数载入数据载入神经网络结构、损失及优化训练及测试损失、精度可视化qu ... [详细]
  • 本文详细介绍了Java反射机制的基本概念、获取Class对象的方法、反射的主要功能及其在实际开发中的应用。通过具体示例,帮助读者更好地理解和使用Java反射。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • Python 序列图分割与可视化编程入门教程
    本文介绍了如何使用 Python 进行序列图的快速分割与可视化。通过一个实际案例,详细展示了从需求分析到代码实现的全过程。具体包括如何读取序列图数据、应用分割算法以及利用可视化库生成直观的图表,帮助非编程背景的用户也能轻松上手。 ... [详细]
  • 本文全面解析了 Python 中字符串处理的常用操作与技巧。首先介绍了如何通过 `s.strip()`, `s.lstrip()` 和 `s.rstrip()` 方法去除字符串中的空格和特殊符号。接着,详细讲解了字符串复制的方法,包括使用 `sStr1 = sStr2` 进行简单的赋值复制。此外,还探讨了字符串连接、分割、替换等高级操作,并提供了丰富的示例代码,帮助读者深入理解和掌握这些实用技巧。 ... [详细]
  • Python默认字符解析:深入理解Python中的字符串处理
    在Python中,字符串是编程中最基本且常用的数据类型之一。尽管许多初学者是从C语言开始接触字符串,通常通过经典的“Hello, World!”程序入门,但Python对字符串的处理方式更为灵活和强大。本文将深入探讨Python中的字符串处理机制,包括字符串的创建、操作、格式化以及编码解码等方面,帮助读者全面理解Python字符串的特性和应用。 ... [详细]
  • 本文探讨了在Python中使用序列号字符串进行高效模式替换的方法。具体而言,通过将HTML标签中的`&`替换为`{n}`,并生成形如`[tag, {n}]`的哈希原始字符串。示例字符串为:“这是一个字符串。这是另一部分。”该方法能够有效提升替换操作的性能和可读性。 ... [详细]
  • 在探讨 MySQL 正则表达式 REGEXP 的功能与应用之前,我们先通过一个小实验来对比 REGEXP 和 LIKE 的性能。通过具体的代码示例,我们将评估这两种查询方式的效率,以确定 REGEXP 是否值得深入研究。实验结果将为后续的详细解析提供基础。 ... [详细]
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社区 版权所有