正则表达式简介

‌正则表达式(‌Regular Expression,简称‌regex)是一种强大的文本处理工具,用于描述、匹配一系列符合特定规则的字符串。它通过使用普通字符和特殊字符(称为元字符)的组合,来定义一个文本模式,从而实现对字符串的搜索、替换等操作。正则表达式在计算机科学中有着广泛的应用,几乎所有现代编程语言都支持正则表达式的使用,包括但不限于‌Java、‌JavaScript、‌Python等。

正则表达式在 Python 中的基本应用

使用正则表达式,首先需要引入一个包re
Python中,正则表达式的匹配方法分为三种,分别为matchsearchfindall。以上的方法都接收两个参数,第一个为需要匹配的字符串或正则表达式,第二个为目标字符串。

match方法:从头开始匹配,匹配一次。若目标字符串的开头没有与表达式匹配的元素,返回None
search方法:从头开始寻找,当查询到第一个符合的位置时,返回找到的元素并停止。
findall方法:查找所有匹配的元素,并全部返回。

正则表达式的语法

单字符的规则

以下组合均代表一个字符。

  • .:代表任意的字符,其中\.代表点本身。
  • []:代表属于括号内范围的字符,其中若表示区间,用“-”表示,不同字符之间不带空格。比如[1-7a-dA-Z]
  • \d:表示数字0-9。
  • \D:表示非数字。
  • \s:表示空白(空格或Tab)。
  • \S:表示非空白。
  • \w:表示单词字符(大小写,数字和下划线)
  • \W:表示非单词字符。

注意,由于反斜杠在字符串中代表转义字符,因此在代码中需要用“r”来取消对转义字符的识别,示例如下。

1
2
3
import re
s = 'abcdefg1'
print(re.match(r'^[a-g]+\d$'))

字符长度限制规则

以下表达式表示了对前者字符数量的限制:

  • *:表示0到无数个
  • +:表示1到无数个
  • ?:表示0或1个
  • {m}:表示该字符只能出现m次
  • {m,}:表示该字符最少出现m次
  • {m,n}:表示出现m到n次(其中包含n)

需要注意的是,正则的语法中,对空格的限制较为严格,如上述的表达式{m,n},不能出现任何空格,否则匹配无效。

边界限制

以下表达式限制了字段的边界,即规定查询整个字符串还是字符串的子串。

  • ^:表示字符串开头
  • $:表示字符串结尾
  • \b:表示单词边界
  • \B:表示非单词边界

分组和选择

  • ():表示这是一个单独的字符串分组,在父级表达式中视作一个字符
  • |:在括号内使用,表示“或”。

应用实例

题目:用正则表达式判定一个字符串是QQ号,长度为5-11位,第一位不能为0.
代码

1
2
3
4
import re
s = '12345678'
r = r'^[1-9][0-9]{4,10}$'
print(re.match(r, s))

题目:用正则表达式判定一个字符串是电子邮件,电子邮件的规范为xxx[.xxx.xxx]@xxx[.xxx.xxx].xxx
代码

1
2
3
4
import re
s = '[email protected]'
r = r'(^\w+(\.\w+)*@(qq|gmail|163)(\.\w+)$)'
print(re.match(r, s))

代码返回的结果如下:
<re.Match object; span=(0, 21), match='[email protected]'>

这个代码中,\w+表示至少一个单词字符,(\.\w+)*表示可以存在由点号和至少一个字符组成的后缀,(qq|gmail|163)表示可选三种字段中的任意一个。
注意:findall()方法会将每一个分组列出,对于存在多个分组的表达式,应选择match方法,并且在表达式两边加上括号。

(润啦,最近的Python基础告一段落!)