正则表达式简介及基本语法

语法

基本字符

在指定位置匹配单个的数字、小写字母或者大写字母,通过“-”表示前后范围,如[3-6]和[h-m]。

形式 说明
[0123456789] 匹配一个数字
[0-9]
[a-z] 匹配一个小写字母
[A-Z] 匹配一个大写字母
[0-9a-zA-Z] 匹配一个数字或者字母
[^...] 匹配一个非“...”中的字符,如[^0-9]

元字符

形式 说明
. 匹配除换行符以外的任意字符
d 匹配数字
D 匹配非数字
w 匹配字母或数字或下划线
W 匹配非字母或数字或下划线

非打印字符

形式 说明
cx 匹配由x指明的控制字符,x为字母,如cM匹配一个Control-M或回车符。
f 匹配一个换页符,等价于x0c和cL。
匹配一个换行符,等价于x0a和cJ。
匹配一个回车符,等价于x0d和cM。
s 匹配任意空白符,包括空格、制表符、换页符等,等价于[f v],此外,Unicode正则表达式会匹配全角空格符。
S 匹配非空白符,等价于[^f v]。
匹配一个制表符,等价 x09和cI。
v 匹配一个垂直制表符,等价于x0b和cK。

定位符

形式 说明
^ 匹配字符串的开始位置,如果设置了RegExp对象的Multiline属性,还将与 或 之后的位置匹配。
$ 匹配字符串的结尾位置,如果设置了RegExp对象的Multiline属性,还将与 或 之前的位置匹配。
 匹配一个单词的边界,即单词首字符或末字符。
B 匹配非单词边界

限定符

形式 说明
* 匹配前面的子表达式零次或多次, 等价于{0,}。
+ 匹配前面的子表达式一次或多次,等价于 {1,}。
? 匹配前面的子表达式零次或一次,等价于 {0,1}。
{n} 指定匹配n次,n为正整数。
{n,} 至少匹配n次,n为正整数。
{n,m} 最少匹配n次且最多匹配m次,m和n均为正整数,且n<=m,{}之中不能有空格。

特殊字符

形式 说明
[ 标记一个中括号表达式的开始。
{ 标记限定符表达式的开始。
| 表示或关系。
将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。

选择

形式 说明
() 捕获分组,并且保存分组中匹配的值,如([^d])。
?: 非捕元,取消分组优先,即消除由()保存的匹配值,如(?:[^d])。
?= 正向预查,在任何开始匹配圆括号内的正则表达式模式的位置来匹配搜索字符串,如exp1(?=exp2)表示查找exp2前面的exp1。
?<= 正向预查,与?=的查找方向相反,如(?<=exp1)exp2表示查找exp1后面的exp2。
?! 负向预查,在任何开始不匹配该正则表达式模式的位置来匹配搜索字符串,如exp1(?!exp2)表示查找后面不是exp2的exp1。
?<! 负向预查,与?!的查找方向相反,如(?<!exp1)exp2表示查找前面不是exp1的exp2。

案例

# 身份证
[1-9]d{14}(d{2}[0-9X])?

# 浮点数
d+(.d+)?

# 只筛选整数(python)
import re
str=input("请输入字符串:")
ret=re.findall(r"d+(?:.d+)|(d+)",str)
ret.remove('')
print(ret)

# 贪婪:从<开始到最后一个>结束
<.*>
# 非贪婪:从<开始遇到第一个>结束
<.*?>

# 反向引用:输出相邻且相同的两个单词
([a-z]+) 1
# 通过分组命名实现,同上面的效果类似
(?P<name>[a-z]) (?P=name)

你可能感兴趣的