正则表达式可用于搜索、编辑和操作文本。PythonRegEx被几乎所有公司广泛使用,并且对其应用程序具有良好的行业牵引力,使得正则表达式越来越重要。今天我们就一起学习Python正则表达式。为什么要使用正则表达式。要回答这个问题,我们先来看看我们面临的各种问题,而这些问题又可以通过使用正则表达式来解决。考虑以下场景:在文章的最后,有一个包含大量数据的日志文件。从这个日志文件中,您只想获取日期和时间。乍一看,日志文件的可读性很低。在这种情况下,正则表达式可用于识别模式并轻松提取所需信息。考虑下一个场景:你是一名销售人员,有很多电子邮件地址,其中很多是假的/无效的,请看下图:我们可以做的是使用正则表达式,可以验证电子邮件地址的格式并从中过滤掉假ID真实身份证。下一个场景与销售员示例非常相似,考虑下图:我们如何验证电话号码,然后按来源国对其进行分类?每个正确的数字都会有一个特定的模式,可以使用正则表达式进行跟踪和追踪。接下来是另一个简单的场景:我们有一个学生数据库,其中包含姓名、年龄和地址等详细信息。考虑区号最初是59006但现在已更改为59076的情况,为每个学生手动更新此代码将是一个耗时且漫长的过程。基本上,为了使用正则表达式解决这些问题,我们首先从包含pincode的学生数据中找到一个特定的字符串,然后将它们全部替换为新字符串。什么是正则表达式?正则表达式用于识别文本字符串中的搜索模式。它还有助于找出数据的正确性。您甚至可以使用正则表达式来查找、替换和格式化数据。考虑以下示例:在给定字符串的所有数据中,假设我们只想要城市,这可以以格式化的方式转换为仅包含名称和城市的字典。现在的问题是,我们能否确定一种猜测名称和城市的模式?我们也可以查出年龄,随着年龄的增长,这很容易,对吧?它只是一个整数。我们用这个名字做什么?如果您查看架构,所有名称都以大写字母开头。在正则表达式的帮助下,我们可以使用这种方法来识别姓名和年龄。我们可以使用下面的代码importreNameage='''Janiceis22andTheonis33Gabrielis44andJoeyis21'''ages=re.findall(r'd{1,3}',Nameage)names=re.findall(r'[A-Z][a-z]*',Nameage)ageDict={}x=0foreachnameinnamesageDict[eachname]=ages[x]x+=1print(ageDict)Output:{'Janice':'22','Theon':'33','Gabriel':'44','Joey':'21'}一些正则表达式的例子:正则表达式可以做很多事情。在这里,我列出了一些非常重要的东西,以帮助更好地理解正则表达式的用法。我们先看看如何在字符串中查找特定的单词Findawordinastringimportreifre.search("inform","weneedtoinformhimwiththelatestinformation"):print("Thereisinform")All我们在这里做的是搜索以查看我们的搜索字符串中是否存在单词inform。当然我们也可以优化下面的代码importreallinform=re.findall("inform","我们需要通知他最新的信息!")foriinallinform:print(i)这里,在这种特殊情况下,会找到infor两次。一个来自通知,另一个来自信息。在正则表达式中查找单词就是这么简单,如上所示。接下来我们将看到如何使用正则表达式生成迭代器。生成迭代器生成迭代器是一个简单的查找和定位字符串开始和结束索引的过程。考虑以下示例:importreStr="weneedtoinformhimwiththelatestinformation"foriinre.finditer("inform.",StrlocTuple=i.span()print(locTuple)对于找到的每个匹配项,两者都开始和结束索引被打印。当我们执行上面的程序时,输出如下:(11,18)(38,45)接下来我们将研究如何使用正则表达式将单词与模式匹配。将单词与模式匹配考虑一个输入我们必须匹配特定单词的字符串。详细说明,请参见以下示例代码:importreStr="Sat,hat,mat,pat"allStr=re.findall("[shmp]at",Str)foriinallStr:print(i)Whatiscommoninthestrings?可以看到字母“a”和“t”在所有输入的字符串中都是通用的,代码中的[shmp]表示查找单词的第一个字母,所以任何以字母s、h、m或p开头的子字符串都将被视为匹配项,其中任何一个,并且必须在末尾后跟“at”。输出:hatmatpat接下来我们将研究如何使用正则一次匹配一系列字符的表达式。为了匹配一系列字符,我们希望输出首字母应在h和m之间且必须后跟at的所有单词。看下面的例子,我们应该得到TheoutputishatandmatimportreStr="sat,hat,mat,pat"someStr=re.findall("[h-m]at",Str)foriinsomeStr:print(i)输出:hatmat现在让我们稍微改变一下上面的程序以获得不同的结果print(i)发现了细微差别?,我们在正则表达式中添加了一个插入符号(^),它的效果否定了它后面的任何效果。我们不会为从h到m的所有内容提供输出,而是向我们展示其他所有内容的输出。我们可以预期的输出是不以h和m之间的字母开头但仍跟在末尾的单词。输出:satpat替换字符串:接下来,我们可以使用正则表达式来检查另一个操作,我们将字符串中的一项替换为其他内容:importreFood="hatratmatpat"regex=re.compile("[r]at")Food=regex.sub("food",Food)print(Food)在上面的示例中,单词rat被替换为单词food。利用这种情况的正则表达式替代方案也有多种实际用例。输出:hatfoodmatpatBackslashproblemimportrerandstr="HereisEdureka"print(randstr)输出:HereisEdureka这是反斜杠问题,其中一个斜杠从输出中消失了,这个特殊问题可以使用正则表达式来解决。importrerandstr="HereisEdureka"print(re.search(r"Edureka",randstr))输出:
