1、 规则:
\d:匹配一个数字字符。等价于[0-9]
\D:匹配一个非数字字符。等价于[^0-9]
\w:匹配包括下划线的任何单词字符。
\W:匹配任何非单词字符
*:匹配前面的子表达式任意次(包含0次)
+:匹配前面的子表达式至少一个字符,?:匹配前面的子表达式0 个或 1 个字符,
. : 匹配除“\r\n”之外的任何单个字符。要匹配包括“\r\n”在内的任何字符,请使用像“[\s\S]”的模式。
用{n}表示 n 个字符,用{n,m}表示 n-m 个字符,
[0-9a-zA-Z\_]可以匹配一个数字、字母或者下划线
0-9a-zA-Z\_]+可以匹配至少由一个数字、字母或者下划线组成的字符串,比如'a100','0_Z','Py3000'等等
[a-zA-Z\_][0-9a-zA-Z\_]*可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串,也就是 Python合法的变量
[a-zA-Z\_][0-9a-zA-Z\_]{0, 19}更精确地限制了变量的长度是1-20个字符(前面 1 个字符+后面最多 19 个字符)
A|B 可以匹配 A 或 B,所以[P|p]ython 可以匹配'Python'或者'python'。
^表示行的开头,^\d 表示必须以数字开头。
$表示行的结束,\d$表示必须以数字结束。
用\s 可以匹配一个空格(也包括 Tab 等空白符),所以\s+表示至少有一个空格,例如匹配' ',' '等
2、使用
import re
2.1 match //匹配成功返回match对象,否则返回nonetest = '用户输入的字符串'
if re.match(r'正则表达式',test):
print('ok')
else:
print('fail')
group
g = re.match(r'正则表达式',test):
g.group(0) //0 永远返回原始字符串
g.group(1)
g.group(2)
g.group(....)
2.2 split 切割
2.2.1
str = 'a b c';
普通切割:
rs = str.split(' ') //['a','b','','','c'],无法识别b与c之间的多个连续空格
正则切割
rs = re.split(r'\s+','a b c')//['a','b','c'] , 无论多少个空格都可以正常分割
2.2.2 加入空格、逗号、分号
re.split(r'[\s\,]+', 'a,b, c d') //['a','b','c','d']
re.split(r'')
2.3 贪婪匹配
re.match(r'^(\d+)(0*)',123400).groups() //(' 123400 ',''),由于\d+采用贪婪模式,尽可能多匹配,把后面00也匹配了.结果0*就匹配不到了
re.match(r'^(\d+?)(0*)',123400).groups() //('1234','')加?采用非贪婪模式,前面就不能匹配到00
2.4编译
re_telephone = re.compile(r'^(\d{3})-(\d{3,8})$')
re_telephone.match('010-12345').groups() //('010', '12345')