正则表达式的规则

  • Post author:
  • Post category:其他


正则表达式的规则

  1. 精确匹配精确匹配,即明文给出我们想要匹配的模式

  2. 模糊匹配

    模糊匹配包括匹配符号和特殊序列,下面分别讲解。正则表达式中常见的匹配符号如下表所示。

    在这里插入图片描述

  3. 贪婪匹配

    *、+、?、{m}、{m,}和{m,n}这6种匹配符号默认都是贪婪匹配的,即会尽可能多地去匹配符合条件的内容。

  4. 非贪婪匹配

    要实现非贪婪匹配很简单,就是在上述6种贪婪匹配符号后面加上问号?即可,即*?、+?、??、{m}?、{m,}?和{m,n}?。

  5. 正则表达式中常见的特殊序列

    特殊序列由转义符号\和一个字符组成,常见的特殊序列及其用法如下表所示。

    在这里插入图片描述

  6. 位置标记

    置标记位置标记锚点(position marker anchor)是标识字符串位置的正则表达式。默认情况下,正则表达式所匹配的字符可以出现在字符串中任何位置,见表。

    在这里插入图片描述


在Python中,我们使用import re来导入正则表达式这个内建模块(无须使用pip来安装)。


其中,网络工程师较常用的Python正则表达式的函数主要有4种,分别为re.match()、re.search()、 re.findall()和re.sub(),下面对它们分别进行说明。

 re.match()re.match()函数用来在字符串的起始位置匹配指定的模式,如果匹配成功,则re.match()的返回值为匹配到的对象。如果想查看匹配到的对象的具体值,则还要对该对象调用group()函数。如果匹配到的模式不在字符串的起始位置,则re.match()将返回空值(None)。

在这里插入图片描述

pattern即我们要匹配的正则表达式模式。string为要匹配的字符串。flags为标志位,用来控制正则表达式的匹配方式,如是否区分大小写、是否多行匹配等。flags为可选项,不是很常用

举例如下: 我们使用re.match()函数,从字符串“Test match() function ofregular expression.”里精确匹配模式“Test”,因为“Test”位于该段字符串的起始位置,所以匹配成功,并且返回一个匹配到的对象<re.Match object; span=(0, 4), match=‘Test’> (即用print(a)看到的内容),为了查看该对象的具体值,我们可以对该对象调用group()方法,得到具体值“Test”(即用print (a.group())看到的内容),该值的数据类型为字符串,group()函数在Python的正则表达式中很常用,务必熟练使用。

如果我们不从字符串的起始位置去匹配,而是去匹配中间或末尾的字符串内容,则re.match()将匹配不到任何内容,从而返回空值(None)。比如我们尝试匹配“function”这个词,因为“function”不在“Test match() function of regularexpression.”的开头,所以re.match()的返回值为None。

在上面两个例子中,我们分别在模式“Test”和“function”的前面加上了一个r,这个r代表原始字符串(Raw String)。在Python中,原始字符串主要用来处理特殊字符所产生的歧义,比如前面讲到的转义字符\就是一种特殊字符,它会产生很多不必要的歧义。在正则表达式中,建议使用原始字符串。

 re.search()

re.search()函数和re.match()一样,返回值为字符串,但是它比re.match()更灵活,因为它允许在字符串的任意位置匹配指定的模式。re.search()函数的语法如下。

在这里插入图片描述

虽然re.search()可以在字符串的任意位置匹配模式,但是它和re.match()一样一次只能匹配一个字符串内容.。

 re.findall()

如果字符串中有多个能被模式匹配到的关键词,并且我们希望把它们全部匹配出来,则要使用re.findall()。同re.match()和re.search()不一样,re.findall()的返回值为列表,每个被模式匹配到的字符串内容分别是该列表中的元素之一。

re.findall()函数的语法如下。

在这里插入图片描述

 re.sub()

最后要讲的re.sub()函数是用来替换字符串里被匹配到的字符串内容的,类似Word的替换功能。除此之外,它还可以定义最大替换数(Maximum Number of Replacement)来指定sub()函数所能替换的字符串内容的数量,默认状态下为全部替换。re.sub()的返回值是字符串。re.sub()函数的语法如下。

在这里插入图片描述

re.sub()函数的语法与前面讲到的re.match()、re.search()、re.findall() 3个函数略有不同,re.sub()函数里多了一个replacement参数,它表示被替换后的字符串内容。optional flags可以用来指定所替换的字符串内容的数量,如果只想替换其中1个字符串内容,则可以将optional flags位设为1;如果想替换其中的前两个字符串内容,则设为2;依此类推。如果optional flags位空缺,则默认状态下为全部替换。

7、



版权声明:本文为qq_27546717原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。