正则表达式
正则表达式是一种文本模式,包括普通字符(例如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
}