作为一个概念,正则表达式并不是Python独有的。但是,Python中正则表达式的实际使用还是有一些细微的差别。将介绍Python中搜索和查找字符串的一些方法,并讨论如何使用分组来处理我们查找到的匹配对象的子项。Python中使用的正则表达式模块通常称为“re”。>>>importrePython中的原始类型字符串Python编译器使用''(反斜杠)表示字符串常量中的转义字符。如果反斜杠后跟一串编译器可以识别的特殊字符,则整个转义序列将被替换为相应的特殊字符(例如,'n'将被编译器替换为换行符)。但这给在Python中使用正则表达式带来了问题,因为在're'模块中也使用了反斜杠来转义正则表达式中的特殊字符(例如*和+)。两者的混合意味着有时你必须转义转义字符本身(当特殊字符被Python和正则表达式编译器识别时),但在其他时候你不需要(如果特殊字符字符只被识别由Python编译器)。我们可以使用原始字符串,而不是试图弄清楚我们需要多少个反斜杠。可以简单地通过在普通字符串的双引号前加上字符“r”来创建原始类型字符串。当字符串是原始类型时,Python编译器不会尝试对其进行任何替换。本质上,您是在告诉编译器不要管您的字符串。Thisisanordinarystring这是一个原始类型的字符串。在Python中使用正则表达式进行搜索're'模块提供了几种对输入字符串执行精确查询的方法。我们将讨论的方法是:每个方法都采用一个正则表达式和一个字符串来查找匹配项。让我们更详细地了解这些方法中的每一种,以了解它们的工作原理和区别。使用re.match查找——匹配开始让我们先看看match()方法。match()方法的工作方式是它仅在搜索字符串的开头与模式匹配时才找到匹配项。例如,对字符串'dogcatdog'调用mathch()方法将匹配搜索模式'dog':稍后我们将详细讨论group()方法。现在,我们只需要知道我们用0作为参数调用它,group()方法返回它找到的匹配模式。我现在也跳过了返回的SRE_Match对象,我们稍后会讨论它。但是,如果我们在同一个字符串上调用math()方法,查找模式“cat”,将找不到匹配项。使用re.search查找——匹配任意位置search()方法类似于match(),但是search()方法并没有限制我们只能从字符串的开头查找匹配项,因此查找'cat'在我们的示例字符串中将找到一个匹配项:但是,search()方法在找到匹配项后停止搜索,因此在我们的示例字符串中使用searc()方法搜索“dog”只会找到它的第一个匹配项。使用re.findall-所有匹配的对象到目前为止,Python中最常用的查找方法是findall()方法。当我们调用findall()方法时,我们可以简单地获取所有匹配模式的列表,而不是获取匹配对象(稍后我们将详细讨论匹配对象)。这对我来说更容易。在我们得到的示例字符串上调用findall()方法:使用match.start和match.end方法那么前面的search()和match()方法之前返回给我们的“match”对象到底是什么?和简单的返回字符串的匹配部分不同。search()和match()返回的“匹配对象”实际上是一个用于匹配子字符串的包装类。早些时候你看到我可以通过调用group()方法得到匹配的子字符串,(我们将在下一节中看到,匹配对象在处理分组问题时实际上非常有用),但是匹配对象还包含更多关于匹配子串。例如,匹配对象可以告诉我们匹配到的内容是原始字符串中的开始和结束位置:了解这些信息有时非常有用。使用mathch.group按数字分组正如我之前提到的,匹配对象在处理分组时非常方便。分组是针对整个正则表达式定位特定子串的能力。我们可以定义一个组作为整个正则表达式的一部分,然后独立定位这部分匹配的内容。让我们看看它是如何工作的:>>>contactInfo='Doe,John:555-1212'我刚刚创建的字符串类似于从某人的地址簿中截取的片段。我们可以将这一行与正则表达式匹配,如下所示:通过用括号(字符“(”和“)”)包围正则表达式的特定部分,我们可以对内容进行分组,然后分别处理这些子组。>>>match=re.search(r'(\w+),(\w+):(\S+)',contactInfo)这些分组可以通过分组对象的group()方法得到。它们可以通过它们在正则表达式中从左到右出现的数字顺序(从1开始)来定位:组的序号从1开始的原因是因为第0组是为所有匹配对象保留的(我们在I之前看过match()方法和search()方法)。使用match.group按别名分组有时,尤其是当正则表达式有很多组时,按出现顺序定位组变得不切实际。Python还允许您使用以下语句指定组名:>>>match=re.search(r'(?P
