迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

在 Python 中使用 Re 模块的正则表达式通配符

作者:迹忆客 最近更新:2023/06/01 浏览次数:

通配符在正则表达式中用作表示或交换一个或多个字符的符号。 这些主要用于简化搜索条件。

本文详细解释了如何在 Python 中使用带有通配符的 re.sub() 来匹配字符串与正则表达式。


使用 re.sub() 函数在 Python 中使用通配符进行正则表达式操作

Python 中的 re 模块用于对正则表达式 (RegEx) 进行操作。 这些是用于查找一个字符串或一组字符串的唯一字符串。

将文本与特定模式进行比较可以确定它是否存在。

它还可以将一个模式划分为一个或多个子模式。 通过 re 模块在 Python 中提供正则表达式支持。

它的主要目的是在正则表达式中搜索字符串。

在我们了解如何在 Python 中使用带有通配符的 re.sub() 之前,让我们学习一下 re.sub() 函数在普通字符串语句上的实现。


在 Python 中使用 re.sub() 模块替换正则表达式中的匹配项

re.sub() 函数用字符串替换给定文本中的一个或多个匹配项。

re.sub(pattern, repl, string, count=0, flags=0)

它返回通过用替换 repl 替换字符串中模式最左边的非重叠事件而创建的字符串。

在没有匹配的情况下,字符串以其原始形式返回。 如果 repl 是字符串,则处理任何反斜杠转义。 repl 也可以是一个函数。

让我们理解下面的代码示例。

import re

rex = '[0-9]+'
string_reg = 'ID - 54321, Pay - 586.32'
repl = 'NN'

print('Original string')
print(string_reg)

result = re.sub(rex, repl, string_reg)

print('After replacement')
print(result)

代码的作用:

  1. 第一行代码导入 re 模块。
  2. 要搜索的模式存储在变量 rex 中。 量词 - [0-9]+ 表示一组 0-9 的数字,其小数位可以扩展到任意位数。
  3. 执行子操作的字符串存储在变量 string_reg 中。
  4. 替换模式的字符串存储在变量 repl 中。
  5. re.sub() 操作在字符串变量 string_reg 中查找模式 rex 并将其替换为 repl。 返回的字符串存储在变量 result 中。
result = re.sub(rex, repl, string_reg)

输出:所有数字都被替换为“NN”,而所有字母数字都保持不变。

Original string
ID - 54321, Pay - 586.32
After replacement
ID - NN, Pay - NN.NN

了解如何在 re.sub() 子模块中使用通配符

本文主要关注四种类型的通配符—— . (点)、*?+ 。 了解它们各自的作用对于学习如何在 Python 中使用带有通配符的 re.sub() 非常重要。

  1. . (The Dot) - 将 re.sub 与 . Python 中的通配符匹配除新行之外的任何字符。 下面程序中引入了re模块,在一个字符串变量string_reg中存放了三个字符串实例。

    re.sub(). 在 Python 中使用通配符时,string_reg 变量会被 re.sub() 函数返回的结果覆盖。 当点与新字符匹配时,程序会搜索模式 ad 以及在 ad 之后重复的任意数量的 d。

    在输出中可以看出,每次程序找到模式 ad. 时,都会将其替换为 REMOVED。

    import re
    string_reg = 'a23kaddhh234 ... add2asdf675 ... xxxadd2axxx'
    string_reg = re.sub(r'ad.', 'REMOVED ', string_reg)
    print(string_reg)
    
    输出:
    a23kREMOVED hh234 ... REMOVED 2asdf675 ... xxxREMOVED 2axxx
    
  2. 星号 (*) - 在 Python 中使用带有此通配符的 re.sub() 来为前面的 RE 提供尽可能多的重复,在结果 RE 中匹配 0 次或更多次重复。

    例如,ad* 匹配字母“a”、“ad”或后跟任意数量的 d 的“a”。

    可以在此处的输出中看到,“a”和“ad”的每个实例都被关键字“PATCH”替换。

    import re
    string_reg = 'a23kaddhh234 ... add2asdf675 ... xxxadd2axxx'
    string_reg = re.sub(r'ad*', 'PATCH', string_reg)
    print(string_reg)
    
    输出:
    PATCH23kPATCHhh234 ... PATCH2PATCHsdf675 ... xxxPATCH2PATCHxxx
    
  3. + - 在 Python 中使用带有此通配符的 re.sub() 来匹配新 RE 中先前 RE 的 1 次或多次重复。 Ad+ 不会匹配 'a'; 相反,它匹配 'a' 后跟任何非零数的 d。

    该函数搜索模式“ad....”,其中“...”表示后续 RE“d”的重复编号,并将其替换为“POP”。

    import re
    string_reg = 'a23kaddhh234 ... add2asdf675 ... xxxadd2axxx'
    string_reg = re.sub(r'ad+', 'POP', string_reg)
    print(string_reg)
    
    输出:
    a23kPOPhh234 ... POP2asdf675 ... xxxPOP2axxx
    
  4. ? - 使下一个 RE 匹配前一个 RE 的 0 或 1 次重复。 模式 ad? 匹配“a”或“ad”。

    该程序找到“a”或“ad”的实例并将它们替换为正则表达式 (REGEX)“POP”。

    import re
    string_reg = 'a23kaddhh234 ... add2asdf675 ... xxxadd2axxx'
    string_reg = re.sub(r'ad?', 'POP', string_reg)
    print(string_reg)
    
    输出:
    POP23kPOPdhh234 ... POPd2POPsdf675 ... xxxPOPd2POPxxx
    

在 Python 中一起使用两个或多个正则表达式通配符

有时,在 Python 中使用带通配符的 re.sub() 仅使用一个量词不足以获得所需的结果。 组合量词可以将更复杂的模式传递给系统。

让我们了解其中的一些。

  1. *?+??? - 在前面的示例中,我们了解了“.”、“+”、“*”量词。 它们都是贪心的,意味着它们匹配尽可能多的文本。

    例如,如果 RE<.*><a> b <c> 匹配,它将匹配完整的字符串而不是仅仅匹配 <a>,这通常不是所需的行为。

    ? 最后添加量词来解决这个问题。 量词指示它以最小或非贪婪的方式进行匹配,这意味着匹配的字符最少。

    当使用 RE<.*?> 模式时,只有 <a> 会匹配。

    import re
    string_reg = 'as56ad5 ... dhgasd55df ... xxxadd2axxx'
    string_reg = re.sub(r'ad*?', 'SUGAR', string_reg)
    print(string_reg)
    
    输出:ad*? 量词只搜索“a”的实例。
    SUGARs56SUGARd5 ... dhgSUGARsd55df ... xxxSUGARdd2SUGARxxx
    
    对于 ad+?: 它只搜索“ad”的实例。
    as56SUGAR5 ... dhgasd55df ... xxxSUGARd2axxx
    
    对于 ad??:它还只搜索“a”的实例。
    SUGARs56SUGARd5 ... dhgSUGARsd55df ... xxxSUGARdd2SUGARxxx
    
  2. *+++?+(也称为所有格量词)- 类似于“*”、“+”和“?” 量词,带有“+”的量词尽可能频繁地匹配。

    当它后面的表达式不匹配时,这些不允许像贪婪量词那样进行回溯。 这种类型的量词称为所有格量词。

    例如,a*a 将匹配“aaaa”,因为 a* 匹配所有四个 a,但是当遇到最后一个“a”时,表达式回溯,a* 总共只匹配三个 a 和最后一个“a” 匹配第四个“a”。

    但是当表达式 a*+a 用来匹配 "aaaa" 时,a*+ 会匹配所有四个 "a",但是它不能回溯,不会匹配到最后的 "a",因为它找不到更多 要匹配的字符。

    x*+x++x?+ 的等价物分别是 (?>x*)(?>x+)(?>x?)。 让我们看一下程序以更好地理解这个概念。

    import regex
    string_reg = 'as56ad5 ... dhgasd55df ... xxxadd2axxx'
    string_reg = regex.sub(r'ad*+', 'SUGAR', string_reg)
    print(string_reg)
    
    注意 :re 模块不支持所有格量词。 请改用 regex() 模块。

     

    输出:查找 a 或 'adddd....' 的实例

    SUGARs56SUGAR5 ... dhgSUGARsd55df ... xxxSUGAR2SUGARxxx
    
    对于 ad++: 查找“ad”或“adddd....”的实例。
    as56SUGAR5 ... dhgasd55df ... xxxSUGAR2axxx
    
    对于 ad+?:ad++ 的行为相同。
    as56SUGAR5 ... dhgasd55df ... xxxSUGARd2axxx
    

通过在 Python 中添加通配符,使用正则表达式模式和 re.sub() 函数对字符串执行操作

我们已经学习了如何在 Python 中使用带有通配符的 re.sub() 。 现在我们将结合使用这些概念来搜索正则表达式中的字符串模式并替换整个单词而不仅仅是字符串模式。

问题陈述向我们展示了一个字符串和一个模式。 需要在给定的字符串中搜索模式。

一旦找到,re.sub() 函数将替换整个单词。

示例:在开头找到模式时替换整个单词

  1. 导入 re 模块。
  2. 创建一个变量 string_reg 并存储任何字符串值。 这里存储了一个复合字符串,这意味着 re.sub() 函数将对字符串内的所有四个组实现其效果。
    string_reg = """\
    ... 23khadddddh234 > REMOVED23khh234
    ... add2asdf675 > REMOVED2asdf675""
    
    该函数需要在字符串中找到一个模式,找到后替换整个字符串。 要查找的模式是“添加”,因此使用量词的组合来实现所需的结果。

    该组合应采用与“ad”、“add”或“addddd”相匹配的方式。 但是,add23khh234 和 add2asdf675 都不匹配。

    最好的方法是使用 add.+?

    string_reg = re.sub(r'add.+? ', 'REMOVED ', string_reg)
    

代码

import re
string_reg = """\
... 23khadddddh234 > REMOVED23khh234
... add2asdf675 > REMOVED2asdf675"""

string_reg = re.sub(r'add.+? ', 'REMOVED ', string_reg)
print(string_reg)

输出:程序搜索“ad...”,找到后将其替换为 repl“REMOVED”。 如果“广告...”出现在开头,它会替换整个单词。

... 23khREMOVED > REMOVED23khh234
... REMOVED > REMOVED2asdf675

总结

生动描述了如何在Python中使用带通配符的 re.sub() 。 本文的第一部分侧重于将 Python 函数 re.sub 与简单的 REGEX 结合使用。

然后详细解释了在 re.sub() 中使用通配符的概念。

阅读本文后,读者可以轻松地在 Python 中使用带有通配符的 re.sub() 并创建在 REGEX 中搜索字符串模式的程序。

上一篇:在 Python 中为对象添加属性

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Python 中为对象添加属性

发布时间:2023/06/02 浏览次数:88 分类:Python

我们将介绍如何在 Python 中为对象添加属性。 我们还将通过示例介绍如何在 Python 中更改对象的属性。在 Python 中为对象添加属性 在 Python 中,我们时常使用对象,因为 Python 是一种面向对象的语

Python 中的匿名对象

发布时间:2023/06/02 浏览次数:185 分类:Python

本篇文章将介绍在 Python 中创建匿名对象的方法。在 Python 中使用 namedtuple 类创建匿名对象 匿名对象只是一个没有真实名称的值。 因此,它被称为匿名。

Python 中的短路评估

发布时间:2023/06/02 浏览次数:193 分类:Python

本文是关于使用逻辑运算符在 Python 中显示短路行为。Python 中的逻辑运算符 or (或)运算符。短路是指当表达式的真值已经确定时终止布尔运算。 Python 解释器以从左到右的方式计算表达式。

Python 比较两个 CSV 文件并打印差异

发布时间:2023/06/02 浏览次数:92 分类:Python

本文将讨论比较两个 CSV 文件的各种方法。 我们将包括执行此操作的最“Pythonic”方式和可帮助简化此任务的外部 Python 模块。最后,我们将包括一种使用 Pandas DataFrames 识别 CSV 文件差异的方法

Python 将 CSV 分割成多个文件

发布时间:2023/06/02 浏览次数:180 分类:Python

在本文中,我们将学习如何在 Python 中将一个 CSV 文件拆分为多个文件。 我们将使用 Pandas 创建一个 CSV 文件并将其拆分为其他多个文件。

Python 中的 F-Test

发布时间:2023/06/01 浏览次数:113 分类:Python

本篇文章介绍 F 统计、F 分布以及如何使用 Python 对数据执行 F-Test 测试。方差(ANOVA) 分析中的 F 值

Python 套接字刷新

发布时间:2023/06/01 浏览次数:141 分类:Python

Python 套接字刷新 我们有没有想过如何在 Python 中刷新套接字?刷新套接字在网络应用程序中很常见,但大多数人需要帮助才能理解它是如何工作的。

Python 套接字 Accept 超时

发布时间:2023/06/01 浏览次数:138 分类:Python

本文讨论了 Python 中套接字的超时功能,该功能对于缓解无限期等待套接字接受的问题是必要的。套接字接受、拒绝和超时。Socket Accept:当socket打开成功,此时服务端和客户端已经建立连接,可

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便