正则表达式
正则表达式是一种文本模式,包括普通字符(例如a到z之间的字母)和特殊字符(称为"元字符"),通过单个字符串来描述、匹配一系列符合某个句法规则的字符串,在各种编程语言中用来检索、替换那些符合某个模式(规则)的文本,本文将为您介绍正则表达式的常用基础知识。
# 元字符
# 基本元字符
元字符 | 说明 | 示例 |
---|---|---|
. | 匹配除了换⾏符 \n 以外所有的字符 | |
| | 匹配左右表达式中的任意一个字符 | z\|food 能匹配z 或food ,(z\|f)ood 则匹配zood 或food |
[] | 定义字符集合, 匹配字符集合中的一个字符 | [abc] 可以匹配1data 中的两个a |
[^] | 对字符集合求非 | [^abc] 可以匹配1data 中的1 、d 、t |
- | 定义一个区间(如[A-Z]) | [a-z] 可以匹配a 到z 范围内的任意小写字母字符 |
\ | 对下一个字符转义 | n 匹配字符n ,\n 匹配一个换行符。序列\\ 匹配\ 而\( 则匹配( |
# 数量元字符
元字符 | 说明 | 示例 |
---|---|---|
* | 匹配前一个字符(子表达式)的零次或多次重复 | zo* 能匹配z 以及zoo ,* 等价于{0,} |
+ | 匹配前一个字符(子表达式)的一次或多次重复 | zo+ 能匹配zo 以及zoo ,但不能匹配z 。+ 等价于{1,} |
? | 匹配前一个字符(子表达式)的零次或一次重复 | do(es)? 可以匹配do 或does ,? 等价于{0,1} |
{n} | 匹配前一个字符(子表达式)的n次重复 | o{2} 不能匹配Bob 中的o ,但是能匹配food 中的两个o |
{m, n} | 匹配前一个字符(子表达式)至少n次且至多m次重复 | o{1,3} 将匹配fooooood 中的前三个o ,o{0,1} 等价于o? ,在逗号和两个数值之间不能有空格 |
{n, } | 匹配前一个字符(子表达式)至少n次重复 | o{2,} 不能匹配Bob 中的o ,但能匹配foooood 中的所有 o ,o{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
2
3
4
5
6
7
8
9
执行结果如下图所示:
最近更新时间: {
"value": "2022-07-26",
"effect": true
}