请选择 进入手机版 | 继续访问电脑版

湖南新梦想

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 552|回复: 0

整理了几个Python正则表达式,拿走就能用!(1)

[复制链接]

3425

主题

3825

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
13528
发表于 2022-9-28 16:46:27 | 显示全部楼层 |阅读模式
本帖最后由 chaomeili 于 2022-9-28 16:48 编辑

   正则表达式可用于搜索、编辑和操作文本。Python RegEx 被几乎所有的公司广泛使用,并且对他们的应用程序具有良好的行业吸引力,从而使得正则表达式越来越受重视。
  今天我们就一起来学习下 Python 正则表达式。
  为什么要使用正则表达式。
  为了回答这个问题,我们先来看看我们面临的各种问题,而这些问题又可以通过使用正则表达式来解决。
  考虑以下场景:
  文末有一个包含大量数据的日志文件,从这个日志文件中,希望只获取日期和时间。乍一看,日志文件的可读性是很低的。
  在这种情况下,可以使用正则表达式来识别模式并轻松提取所需信息。
  考虑下一个场景:你是一名销售人员,有很多电子邮件地址,其中很多地址都是假的/无效的,看看下面的图片:
  我们可以做的是使用正则表达式,可以验证电子邮件地址的格式并从真实 ID 中过滤掉虚假 ID。
  下一个场景与销售员示例的场景非常相似,考虑下图:
  我们如何验证电话号码,然后根据原产国对其进行分类?
  每个正确的数字都会有一个特定的模式,可以通过使用正则表达式来跟踪和跟踪。
  接下来是另一个简单的场景:
  我们有一个学生数据库,其中包含姓名、年龄和地址等详细信息。考虑一下地区代码最初是 59006 但现在已更改为 59076 的情况,这种情况为每个学生手动更新此代码将非常耗时且过程非常漫长。
  基本上,为了使用正则表达式解决这些问题,我们首先从包含 pin 码的学生数据中找到一个特定的字符串,然后将它们全部替换为新字符串。
  什么是正则表达式
  正则表达式用于识别文本字符串中的搜索模式,它还有助于找出数据的正确性,甚至可以使用正则表达式进行查找、替换和格式化数据等操作。
  考虑以下示例
  在给定字符串的所有数据中,假设我们只需要城市,这可以以格式化的方式转换为仅包含名称和城市的字典。现在的问题是,我们能否确定一种模式来猜测名称和城市?此外我们也可以找出年龄,随着年龄的增长,这很容易,对吧?它只是一个整数。
  我们如何处理这个名字?如果你看一下这个模式,所有的名字都以大写字母开头。借助正则表达式,我们可以使用此方法识别姓名和年龄。
  我们可以使用下面的代码:
  1.   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)
复制代码
  Output:
  1.   {'Janice': '22', 'Theon': '33', 'Gabriel': '44', 'Joey': '21'}
复制代码
  正则表达式几个示例:
  可以使用正则表达式执行许多操作。在这里,我列出了一些帮助更好地理解正则表达式的用法非常重要的内容。
  让我们首先检查如何在字符串中找到特定单词
  在字符串中查找一个单词
  1.   import re
  2.   if re.search("inform","we need to inform him with the latest information"):
  3.       print("There is inform")
复制代码
  我们在这里所做的一切都是为了搜索单词 inform 是否存在于我们的搜索字符串中。
  当然我们还可以优化以下代码:
  1.   import re
  2.     allinform = re.findall("inform","We need to inform him with the latest information!")
  3.     for i in allinform:
  4.       print(i)
复制代码
  在这里,在这种特殊情况下,将找到两次infor。一个来自inform,另一个来自information。
  如上所示,在正则表达式中查找单词就这么简单。
  接下来我们将了解如何使用正则表达式生成迭代器。
  生成迭代器
  生成迭代器是找出并目标字符串的开始和结束索引的简单过程。考虑以下示例:
  1.   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)
复制代码
  对于找到的每个匹配项,都会打印开始和结束索引。当我们执行上述程序时,输出如下:
  1.   (11, 18)
  2.   (38, 45)
复制代码
  接下来我们将检查如何使用正则表达式将单词与模式匹配。
  将单词与模式匹配
  考虑一个输入字符串,我们必须将某些单词与该字符串匹配。要详细说明,请查看以下示例代码:
  1.   import re
  2.   Str = "Sat, hat, mat, pat"
  3.   allStr = re.findall("[shmp]at", Str)
  4.   for i in allStr:
  5.       print(i)
复制代码

       字符串中有什么共同点?可以看到字母“a”和“t”在所有输入字符串中都很常见。代码中的 [shmp] 表示要查找的单词的首字母,因此,任何以字母 s、h、m 或 p 开头的子字符串都将被视为匹配,其中任何一个,并且最后必须跟在“at”后面。
  Output:
  1.   hat
  2.   mat
  3.   pat
复制代码
  接下来我们将检查如何使用正则表达式一次匹配一系列字符。
  匹配一系列字符范围
  我们希望输出第一个字母应该在 h 和 m 之间并且必须紧跟 at 的所有单词。看看下面的例子,我们应该得到的输出是 hat 和 mat。
  1.   import re
  2.   Str = "sat, hat, mat, pat"
  3.   someStr = re.findall("[h-m]at", Str)
  4.   for i in someStr:
  5.       print(i)
复制代码
  Output:
  1.   hat
  2.   mat
复制代码

  现在让我们稍微改变一下上面的程序以获得一个不同的结果
  1.   import re
  2.   Str = "sat, hat, mat, pat"
  3.   someStr = re.findall("[^h-m]at", Str)  
  4.   for i in someStr:
  5.       print(i)
复制代码
  发现细微差别了吗,我们在正则表达式中添加了插入符号 (^),它的作用否定了它所遵循的任何效果。我们不会给出从 h 到 m 开始的所有内容的输出,而是会向我们展示除此之外的所有内容的输出。
  我们可以预期的输出是不以 h 和 m 之间的字母开头但最后仍然紧随其后的单词。Output:
  1.   sat
  2.   pat
复制代码

  替换字符串:
  接下来,我们可以使用正则表达式检查另一个操作,其中我们将字符串中的一项替换为其他内容:
  1.   import re
  2.   Food = "hat rat mat pat"
  3.   regex = re.compile("[r]at")
  4.   Food = regex.sub("food", Food)
  5.   print(Food)
复制代码
  在上面的示例中,单词 rat 被替换为单词 food。正则表达式的替代方法就是利用这种情况,它也有各种各样的实际用例。Output:
  1. <font style="background-color:rgb(221, 221, 221)">  hat food mat pat</font>
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|湖南新梦想 ( 湘ICP备18019834号-2 )

GMT+8, 2023-10-5 02:44 , Processed in 0.039772 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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