帮助中心
正则表达式

正则表达式是一种文本模式,包括普通字符(例如a到z之间的字母)和特殊字符(称为"元字符"),通过单个字符串来描述、匹配一系列符合某个句法规则的字符串,在各种编程语言中用来检索、替换那些符合某个模式(规则)的文本,本文将为您介绍正则表达式的常用基础知识。

# 元字符

# 基本元字符

元字符 说明 示例
. 匹配除了换⾏符 \n 以外所有的字符
| 匹配左右表达式中的任意一个字符 z\|food能匹配zfood(z\|f)ood则匹配zoodfood
[] 定义字符集合, 匹配字符集合中的一个字符 [abc]可以匹配1data中的两个a
[^] 对字符集合求非 [^abc]可以匹配1data中的1dt
- 定义一个区间(如[A-Z]) [a-z]可以匹配az范围内的任意小写字母字符
\ 对下一个字符转义 n匹配字符n\n匹配一个换行符。序列\\匹配\\(则匹配(

# 数量元字符

元字符 说明 示例
* 匹配前一个字符(子表达式)的零次或多次重复 zo*能匹配z以及zoo*等价于{0,}
+ 匹配前一个字符(子表达式)的一次或多次重复 zo+能匹配zo以及zoo,但不能匹配z+ 等价于{1,}
? 匹配前一个字符(子表达式)的零次或一次重复 do(es)?可以匹配dodoes?等价于{0,1}
{n} 匹配前一个字符(子表达式)的n次重复 o{2}不能匹配Bob中的o,但是能匹配food中的两个o
{m, n} 匹配前一个字符(子表达式)至少n次且至多m次重复 o{1,3}将匹配fooooood中的前三个oo{0,1}等价于o?,在逗号和两个数值之间不能有空格
{n, } 匹配前一个字符(子表达式)至少n次重复 o{2,}不能匹配Bob中的o,但能匹配foooood中的所有 oo{1,}等价于o+o{0,}则等价于o*

# 位置元字符

元字符 说明
^ 匹配字符串的开头
\A 匹配字符串的开头
$ 匹配字符串的结束
\Z 匹配字符串的结束
< 匹配单词的开头
> 匹配单词的结束
\b 匹配单词边界(开头和结束)
\B \b 的反义, 即单词内部

# 特殊元字符

元字符 说明
[\b] 退格字符
\c 匹配一个控制字符
\d 匹配任意数字字符
\D \d 的反义
\f 换页符
\n 换行符
\r 回车符
\s 匹配一个空白字符
\S \s 的反义
\t 制表符
\v 垂直制表符
\w 匹配任意字母数字或下划线字符
\W \w 的反义
\x 匹配一个十六进制数字
\0 匹配一个八进制数字

# 常用正则表达式

表达式 说明
^(0|[1-9][0-9]*)$ 零和非零开头的数字
^[1-9]\d*$ 非零的正整数
^-[1-9]\d*$ 非零的负整数
^.{3}$ 长度为3的字符
^[A-Za-z]+$ 由26个英文字母组成的字符串
^[A-Z]+$ 由26个大写英文字母组成的字符串
^[a-z]+$ 由26个小写英文字母组成的字符串
^[A-Za-z0-9]+$ 由数字和26个英文字母组成的字符串
^\w+$ 由数字、26个英文字母或者下划线组成的字符串
^[a-zA-Z]"w{5,17}$ 验证用户密码,以字母开头,长度在6~18之间,只能包含字符、数字和下划线
^[\u4e00-\u9fa5]+$ 匹配中文字符串
^\w+[@][a-zA-Z0-9_]+(.[a-zA-Z0-9_]+)$ 验证邮箱地址
^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$ 验证中国内地手机号码
^(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)$ 验证身份证号(15位或18位)

# 使用示例

使用正则表达式提取单词,执行代码如下:

import re
from . import print


def main():
    s = 'This module provides regular expression matching operations similar to those found in Python'
    pat = r'\s[a-zA-Z]+'
    r = re.findall(pat, s)
    print(r)
1
2
3
4
5
6
7
8
9

执行结果如下图所示:

最近更新时间: { "value": "2022-07-26", "effect": true }