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

发表于:2022-9-28 09:22

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:周萝卜    来源:Python绿色通道

  正则表达式可用于搜索、编辑和操作文本。Python RegEx 被几乎所有的公司广泛使用,并且对他们的应用程序具有良好的行业吸引力,从而使得正则表达式越来越受重视。
  今天我们就一起来学习下 Python 正则表达式。
  为什么要使用正则表达式。
  为了回答这个问题,我们先来看看我们面临的各种问题,而这些问题又可以通过使用正则表达式来解决。
  考虑以下场景:
  文末有一个包含大量数据的日志文件,从这个日志文件中,希望只获取日期和时间。乍一看,日志文件的可读性是很低的。
  在这种情况下,可以使用正则表达式来识别模式并轻松提取所需信息。
  考虑下一个场景:你是一名销售人员,有很多电子邮件地址,其中很多地址都是假的/无效的,看看下面的图片:
  我们可以做的是使用正则表达式,可以验证电子邮件地址的格式并从真实 ID 中过滤掉虚假 ID。
  下一个场景与销售员示例的场景非常相似,考虑下图:
  我们如何验证电话号码,然后根据原产国对其进行分类?
  每个正确的数字都会有一个特定的模式,可以通过使用正则表达式来跟踪和跟踪。
  接下来是另一个简单的场景:
  我们有一个学生数据库,其中包含姓名、年龄和地址等详细信息。考虑一下地区代码最初是 59006 但现在已更改为 59076 的情况,这种情况为每个学生手动更新此代码将非常耗时且过程非常漫长。
  基本上,为了使用正则表达式解决这些问题,我们首先从包含 pin 码的学生数据中找到一个特定的字符串,然后将它们全部替换为新字符串。
  什么是正则表达式
  正则表达式用于识别文本字符串中的搜索模式,它还有助于找出数据的正确性,甚至可以使用正则表达式进行查找、替换和格式化数据等操作。
  考虑以下示例:
  在给定字符串的所有数据中,假设我们只需要城市,这可以以格式化的方式转换为仅包含名称和城市的字典。现在的问题是,我们能否确定一种模式来猜测名称和城市?此外我们也可以找出年龄,随着年龄的增长,这很容易,对吧?它只是一个整数。
  我们如何处理这个名字?如果你看一下这个模式,所有的名字都以大写字母开头。借助正则表达式,我们可以使用此方法识别姓名和年龄。
  我们可以使用下面的代码:
  import re
  Nameage = '''
  Janice is 22 and Theon is 33
  Gabriel is 44 and Joey is 21
  '''
  ages = re.findall(r'd{1,3}', Nameage)
  names = re.findall(r'[A-Z][a-z]*',Nameage)
  ageDict = {}
  x = 0
  for eachname in names
      ageDict[eachname] = ages[x]
      x+=1
  print(ageDict)
  Output:
  {'Janice': '22', 'Theon': '33', 'Gabriel': '44', 'Joey': '21'}
  正则表达式几个示例:
  可以使用正则表达式执行许多操作。在这里,我列出了一些帮助更好地理解正则表达式的用法非常重要的内容。
  让我们首先检查如何在字符串中找到特定单词
  在字符串中查找一个单词
  import re
  if re.search("inform","we need to inform him with the latest information"):
      print("There is inform")
  我们在这里所做的一切都是为了搜索单词 inform 是否存在于我们的搜索字符串中。
  当然我们还可以优化以下代码:
  import re
    allinform = re.findall("inform","We need to inform him with the latest information!")
    for i in allinform:
      print(i)
  在这里,在这种特殊情况下,将找到两次infor。一个来自inform,另一个来自information。
  如上所示,在正则表达式中查找单词就这么简单。
  接下来我们将了解如何使用正则表达式生成迭代器。
  生成迭代器
  生成迭代器是找出并目标字符串的开始和结束索引的简单过程。考虑以下示例:
  import re
  Str = "we need to inform him with the latest information"  
  for i in re.finditer("inform.", Str
      locTuple = i.span()
      print(locTuple)
  对于找到的每个匹配项,都会打印开始和结束索引。当我们执行上述程序时,输出如下:
  (11, 18)
  (38, 45)
  接下来我们将检查如何使用正则表达式将单词与模式匹配。
  将单词与模式匹配
  考虑一个输入字符串,我们必须将某些单词与该字符串匹配。要详细说明,请查看以下示例代码:
  import re
  Str = "Sat, hat, mat, pat"
  allStr = re.findall("[shmp]at", Str)
  for i in allStr:
      print(i)
  字符串中有什么共同点?可以看到字母“a”和“t”在所有输入字符串中都很常见。代码中的 [shmp] 表示要查找的单词的首字母,因此,任何以字母 s、h、m 或 p 开头的子字符串都将被视为匹配,其中任何一个,并且最后必须跟在“at”后面。
  Output:
  hat
  mat
  pat
  接下来我们将检查如何使用正则表达式一次匹配一系列字符。
  匹配一系列字符范围
  我们希望输出第一个字母应该在 h 和 m 之间并且必须紧跟 at 的所有单词。看看下面的例子,我们应该得到的输出是 hat 和 mat。
  import re
  Str = "sat, hat, mat, pat"
  someStr = re.findall("[h-m]at", Str)
  for i in someStr:
      print(i)
  Output:
  hat
  mat
  现在让我们稍微改变一下上面的程序以获得一个不同的结果
  import re
  Str = "sat, hat, mat, pat"
  someStr = re.findall("[^h-m]at", Str)  
  for i in someStr:
      print(i)
  发现细微差别了吗,我们在正则表达式中添加了插入符号 (^),它的作用否定了它所遵循的任何效果。我们不会给出从 h 到 m 开始的所有内容的输出,而是会向我们展示除此之外的所有内容的输出。
  我们可以预期的输出是不以 h 和 m 之间的字母开头但最后仍然紧随其后的单词。Output:
  sat
  pat
  替换字符串:
  接下来,我们可以使用正则表达式检查另一个操作,其中我们将字符串中的一项替换为其他内容:
  import re
  Food = "hat rat mat pat"
  regex = re.compile("[r]at")
  Food = regex.sub("food", Food)
  print(Food)
  在上面的示例中,单词 rat 被替换为单词 food。正则表达式的替代方法就是利用这种情况,它也有各种各样的实际用例。Output:
  hat food mat pat
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号