官方定义:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
在线测试工具:http://tool.chinaz.com/regex/?qq-pf-to=pcqq.group
一:字符组:[]
在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示
字符分为很多类,比如数字、字母、标点等等。
[012389] #匹配012389 [0-9] #匹配0123456789所有数字 [a-z] #匹配所有的小写字母 [A-Z] #匹配所有的大写字母 [a-dA-D] #匹配小写a-d和大写A-D [A-a] #混用大小写的话,要根据ascii码,小的码放到前面, 注释:不建议大小写混用,因为中间的ascii码,还包括一些字符比如[ ] / ^ _ /等,混用会不准确
二、元字符
. 匹配除了换行符以外的任意字符 \w 匹配所有字母 数字 下划线 \d 匹配所有数字 \s 匹配任意空白符,空格符space,制表符tab,换行符enter等统称为空白符 \b 匹配一个字符的结尾 $ 匹配字符串的结尾 ^ 匹配字符串的开头 #在[]括号里面表示非 比如[^和] 表示所有 不是‘和 ’的字符 \t 匹配制表符 \W 匹配非字母 数字 下划线
\S 匹配非空白符 \D 匹配非数字 a|b 匹配a或者b () 匹配括号内的表达式,也表示一个组 [...] 匹配字符组中字符 [^...] 匹配除了字符组中字符的所有字符 注释:\w\W \s\S \d\D 任意一组都可以表示匹配所有字符
三、量词
? 匹配一次或者零次 * 匹配零次或者多次 + 匹配有一次或者多次 {n} 匹配n次 {n,} 匹配n次或者更多次 {n,m} 匹配n次到m次 注释:? * +都是贪婪运算,都是尽可能重复多次匹配 ?有多种用法量词后面加一个?表示惰性运算,重复尽可能少的次数
四、元字符和量词的一些组合运用
例1: . ^ $ 正则 待匹配字符 匹配结果 说明 美. 美丽美好美人 美丽美好美人 匹配所有带有‘美’的字符 ^美. 美丽美好美人 美丽 匹配以‘美’为开头,再加一个任意非空白符的字符,找到即结束 ^美& 美丽美好美人 没有匹配到 美.& 美丽美好美人 美人 只匹配结尾的"美.$" ^美.& 美丽美好美人 没有匹配到
五、字符集[][^]
正则 待匹配字符 匹配结果 说明 李[杰莲英二棍子]* 李杰和李莲英和李二棍子 李杰 李莲英 李二棍子 匹配"李"字后面[杰莲英二棍子]的字符任意次 李[^和]* 李杰和李莲英和李二棍子 李杰 李莲英 李二棍子 匹配一个不是"和"的字符任意次
六、分组 ()与 或 |[^]
身份证号码是一个长度为15或18个字符的字符串,如果是15位则全部数字组成,首位不能为0;如果是18位,
则前17位全部是数字,末位可能是数字或x
^([1-9]\d{16}[0-9x]|[1-9]\d{14})&
七、转义符 \
在正则表达式中,有很多有特殊意义的是元字符,比如\d和\s等,如果要在正则中匹配正常的"\d"而不是"数字"就需要对"\"进行转义,变成'\\'。
正则 待匹配字符 匹配结果 说明 \\d \d True 转义\之后变成\\,即可匹配 "\\\\d" '\\d' True 如果在python中,字符串中的'\'也需要转义,所以每一个字符串'\'又需要转义一次 r'\\d' r'\d' True 在字符串之前加r,让整个字符串不转义
注释: 带匹配的是字符是python中的代码 贪婪匹配:在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配 *? 重复任意次,但尽可能少重复 +? 重复1次或更多次,但尽可能少重复 ?? 重复0次或1次,但尽可能少重复 {n,m}? 重复n到m次,但尽可能少重复 {n,}? 重复n次以上,但尽可能少重复