51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1155|回复: 0
打印 上一主题 下一主题

[python] 干货ython正则表达式(内含源码)

[复制链接]
  • TA的每日心情
    擦汗
    昨天 09:05
  • 签到天数: 1048 天

    连续签到: 1 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2022-9-28 10:32:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    正则表达式可用于搜索、编辑和操作文本。Python RegEx 被几乎所有的公司广泛使用,并且对他们的应用程序具有良好的行业吸引力,从而使得正则表达式越来越受重视。
      今天我们就一起来学习下 Python 正则表达式。
      为什么要使用正则表达式。
      为了回答这个问题,我们先来看看我们面临的各种问题,而这些问题又可以通过使用正则表达式来解决。
      考虑以下场景:
      文末有一个包含大量数据的日志文件,从这个日志文件中,希望只获取日期和时间。乍一看,日志文件的可读性是很低的。

    在这种情况下,可以使用正则表达式来识别模式并轻松提取所需信息。
      考虑下一个场景:你是一名销售人员,有很多电子邮件地址,其中很多地址都是假的/无效的,看看下面的图片:


    我们可以做的是使用正则表达式,可以验证电子邮件地址的格式并从真实 ID 中过滤掉虚假 ID。
      下一个场景与销售员示例的场景非常相似,考虑下图:


    我们如何验证电话号码,然后根据原产国对其进行分类?
      每个正确的数字都会有一个特定的模式,可以通过使用正则表达式来跟踪和跟踪。
      接下来是另一个简单的场景:
      我们有一个学生数据库,其中包含姓名、年龄和地址等详细信息。考虑一下地区代码最初是 59006 但现在已更改为 59076 的情况,这种情况为每个学生手动更新此代码将非常耗时且过程非常漫长。
      基本上,为了使用正则表达式解决这些问题,我们首先从包含 pin 码的学生数据中找到一个特定的字符串,然后将它们全部替换为新字符串。
      什么是正则表达式
      正则表达式用于识别文本字符串中的搜索模式,它还有助于找出数据的正确性,甚至可以使用正则表达式进行查找、替换和格式化数据等操作。
      考虑以下示例:


    在给定字符串的所有数据中,假设我们只需要城市,这可以以格式化的方式转换为仅包含名称和城市的字典。现在的问题是,我们能否确定一种模式来猜测名称和城市?此外我们也可以找出年龄,随着年龄的增长,这很容易,对吧?它只是一个整数。
      我们如何处理这个名字?如果你看一下这个模式,所有的名字都以大写字母开头。借助正则表达式,我们可以使用此方法识别姓名和年龄。
      我们可以使用下面的代码:

    1. <font size="3">import re

    2.   Nameage = '''

    3.   Janice is 22 and Theon is 33

    4.   Gabriel is 44 and Joey is 21

    5.   '''

    6.   ages = re.findall(r'd{1,3}', Nameage)

    7.   names = re.findall(r'[A-Z][a-z]*',Nameage)

    8.   ageDict = {}

    9.   x = 0

    10.   for eachname in names

    11.       ageDict[eachname] = ages[x]

    12.       x+=1

    13.   print(ageDict)</font>
    复制代码
    Output:
    1. <font size="3"> {'Janice': '22', 'Theon': '33', 'Gabriel': '44', 'Joey': '21'}</font>
    复制代码
    正则表达式几个示例:
      可以使用正则表达式执行许多操作。在这里,我列出了一些帮助更好地理解正则表达式的用法非常重要的内容。
      让我们首先检查如何在字符串中找到特定单词
      在字符串中查找一个单词

    1. <font size="3">import re

    2.   if re.search("inform","we need to inform him with the latest information"):

    3.       print("There is inform")</font>
    复制代码
     我们在这里所做的一切都是为了搜索单词 inform 是否存在于我们的搜索字符串中。
      当然我们还可以优化以下代码:

    1. <font size="3"> import re

    2.     allinform = re.findall("inform","We need to inform him with the latest information!")

    3.     for i in allinform:

    4.       print(i)</font>
    复制代码
    在这里,在这种特殊情况下,将找到两次infor。一个来自inform,另一个来自information。
      如上所示,在正则表达式中查找单词就这么简单。
      接下来我们将了解如何使用正则表达式生成迭代器。
      生成迭代器
      生成迭代器是找出并目标字符串的开始和结束索引的简单过程。考虑以下示例:

    1. <font size="3"> import re

    2.   Str = "we need to inform him with the latest information"  

    3.   for i in re.finditer("inform.", Str

    4.       locTuple = i.span()

    5.       print(locTuple)</font>
    复制代码
    对于找到的每个匹配项,都会打印开始和结束索引。当我们执行上述程序时,输出如下:
    1. <font size="3"> (11, 18)

    2.   (38, 45)</font>
    复制代码
    接下来我们将检查如何使用正则表达式将单词与模式匹配。
      将单词与模式匹配
      考虑一个输入字符串,我们必须将某些单词与该字符串匹配。要详细说明,请查看以下示例代码:

    1. <font size="3">import re

    2.   Str = "Sat, hat, mat, pat"

    3.   allStr = re.findall("[shmp]at", Str)

    4.   for i in allStr:

    5.       print(i)</font>
    复制代码
     字符串中有什么共同点?可以看到字母“a”和“t”在所有输入字符串中都很常见。代码中的 [shmp] 表示要查找的单词的首字母,因此,任何以字母 s、h、m 或 p 开头的子字符串都将被视为匹配,其中任何一个,并且最后必须跟在“at”后面。
      Output:

    1. <font size="3"> hat

    2.   mat

    3.   pat</font>
    复制代码
    接下来我们将检查如何使用正则表达式一次匹配一系列字符。
      匹配一系列字符范围
      我们希望输出第一个字母应该在 h 和 m 之间并且必须紧跟 at 的所有单词。看看下面的例子,我们应该得到的输出是 hat 和 mat。

    1. <font size="3"> import re

    2.   Str = "sat, hat, mat, pat"

    3.   someStr = re.findall("[h-m]at", Str)

    4.   for i in someStr:

    5.       print(i)</font>
    复制代码
    Output:
    1. <font size="3"> hat

    2.   mat</font>
    复制代码
    现在让我们稍微改变一下上面的程序以获得一个不同的结果
    1. <font size="3">import re

    2.   Str = "sat, hat, mat, pat"

    3.   someStr = re.findall("[^h-m]at", Str)  

    4.   for i in someStr:

    5.       print(i)</font>
    复制代码
     发现细微差别了吗,我们在正则表达式中添加了插入符号 (^),它的作用否定了它所遵循的任何效果。我们不会给出从 h 到 m 开始的所有内容的输出,而是会向我们展示除此之外的所有内容的输出。
      我们可以预期的输出是不以 h 和 m 之间的字母开头但最后仍然紧随其后的单词。Output:

    1. <font size="3">sat

    2. pat</font>
    复制代码
    替换字符串:
      接下来,我们可以使用正则表达式检查另一个操作,其中我们将字符串中的一项替换为其他内容:

    1. <font size="3">import re

    2.   Food = "hat rat mat pat"

    3.   regex = re.compile("[r]at")

    4.   Food = regex.sub("food", Food)

    5.   print(Food)</font>
    复制代码
    在上面的示例中,单词 rat 被替换为单词 food。正则表达式的替代方法就是利用这种情况,它也有各种各样的实际用例。Output:
    1. <font size="3">hat food mat pat</font>
    复制代码



    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-19 00:30 , Processed in 0.065882 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表