正则表达式语法
学习正则表达式语法,主要就是学习元字符以及它们在正则表达式上下文中的行为。
元字符包括:普通字符、标准字符、特殊字符、限定字符(又叫量词)、定位字符(也叫边界字符)。下面分别介绍不同元字符的用法。
普通字符
字母[a-zA-Z]、数字[0-9]、下划线[-]、汉字,标点符号:
匹配字母a可以regex=a
匹配字母b可以regex=b
匹配字母a或者b可以regex=a|b,这个正则引入一个特殊字符“|”,专业名称为“或”,你也可以叫它“竖线”, 它表示“或”的意思。
匹配字母a或者b或者c可以regex=a|b|c
匹配字母a或者b或者c或者d可以regex=a|b|c|d
如果匹配所有26个字母,这种写法明显很二了。
这里引入两个特殊字符方括号“[ ]”和中划线“-”,“[ ]”专业名称为“字符集合”,你也可以叫它“方括号”。“-”,表示“范围”,你也可以叫它“到”,regex=[A-Z]匹配从A到Z26个字母中的任意一个。
那么匹配字母a或者b或者c或者d可以regex=[abcd]。匹配数字1到8的任意数字可以regex=[1-8],这样就不会匹配到0与9这2个数字了。
代码示例
import re
s = "axbged"
result = re.findall("[a-d]", s)
print(result)
代码输出结果:['a', 'b', 'd']
标准字符集合
标准字符集合是能够与“多种普通字符”匹配的简单表达式,比如:\d、\w、\s。
匹配数字0到9的任意数字可以regex=[0-9]也可以regex=\d。标准字符集要注意区分大小写,大写是相反的意思。regex=\D,则匹配非数字字符,即不能匹配数字0到9。
常见的标准字符说明
标准字符含义
\d匹配0-9中任意一个数字,等效于[0-9]
\D匹配非数字字符,等效于[^0-9]
\w匹配任意一个字母、数字或下划线,等效于[A-Za-z0-9_]
\W与任何非字母、数字或下划线字符匹配,等效于[^A-Za-z0-9_]
特殊字符
特殊字符在正则表达式中表示特殊的含义,比如:*,+,?,\,等等。
“\”是转义字符,用于匹配特殊字符
匹配反斜杠“\”可以regex=\\,因为“\”是特殊字符,所以需要在它前边再加一个“\”进行转义
匹配星号“*”,可以regex=\*,因为“*”是特殊字符,所以需要在它前边再加一个“\”进行转义
特殊字符含义
\转义字符,将下一个字符标记为一个特殊字符
^匹配字符串开始的位置
$匹配字符串结尾的位置
*零次或多次匹配前面的字符或表达式
+一次或多次匹配前面的字符或子表达式
?零次或一次匹配前面的字符或子表达式
.匹配除"\r\n"之外的任何单个字符
限定字符
限定字符又叫量词,是用于表示匹配的字符数量的。
匹配任意1位数字可以regex=\d
匹配任意2位数字可以regex=\d\d
匹配任意3位数字可以regex=\d\d\d
匹配任意8位数字,再这么写就有点二了。这里引入用于表示数量限定字符“”。“”,n是一个非负整数,匹配确定的n次。
代码示例:
import re
s = "axbged1235"
result = re.findall("\d{3}", s)
print(result)
代码输出结果:['123']
注意:regex=\d\d{3}匹配任意4个数字不是6个,量词只对它前面的字符负责, regex=\d\d{3}匹配的内容如下:
匹配任意8位数字可以regex=\d{8}
匹配任意8位以上的数字可以regex=\d{8,}
匹配任意1到8位以上的数字可以regex=\d{1,8}
定位字符
定位字符也叫字符边界,标记匹配的不是字符而是符合某种条件的位置,所以定位字符是“零宽的”。
常用定位字符:
定位字符含义
^匹配字符串开始的位置,表示开始
$匹配字符串结尾的位置,表示结尾
\b匹配一个单词边界
代码示例:
import re
s = "hello,gggiuhello"
#匹配h开头,o结尾的字符
pattern = "^h.*o$"
result = re.findall(pattern, s)
print(result)
代码输出结果:['hello,gggiuhello']
常见正则表达式