正则表达式在线测试的网址:http://tool.chinaz.com/regex
正则表达式
作用:
1.检测某段字符串是否符合规则
2.从大段文字中将符合规则的内容匹配出来
ASCII码表:
注:大写字母和小写字母要分开写[A-Za-z],不可以[A-z],因为91-96并非字母
字符组:
字符组的范围是根据ASCII码表来规定的。
字符组的写法:
[A-Z] : 大写字母A至大写字母Z [a-z] : 小写字母a至小写字母z [2-9] : 数字2至9 [a-z0-9] : 字母a-z数字0-9的都符合 [^A-Z] : 匹配非A-Z的字符
注意:
1.不能从大到小,例[9-0] 2.匹配英文字母要[A-Za-z],不能A-z,因为Z到a有6个其他的符号 3.字符组只代表一个字符,例[A-Z0-9a-z]也只能代表一个字符
元字符:
. : 表示任意字符,除了换行符
d : [0-9]
w : [A-Z0-9a-z_] # 字母数字下划线
: 匹配回车换行
: 匹配制表符 Tab
空格 : 匹配所有空格(空白)
s : 匹配空格、换行符和制表符(Tab)
: 匹配一个单词的边界
的例子: abc # 正则表达式 kjgcabc abcabcbb #只会匹配到第一个空格前的abc,在一堆字符中间的不会被匹配到
反义词:
D : [^0-9] # 除了数字之外的所有字符
W : [^A-Z0-9a-z_] # 除了字母数字下划线之外的所有字符
S : [^ ] # 除了空格(空白)、换行符和制表符(Tab)之外的所有字符
匹配所有 : [Dd]或者[Ww]或者[Ss] # [Dd] 匹配非数字和数字
非字符组 : [^123] 匹配非1和2和3之外的所有字符
开始符和结束符:
^ : 永远都是写在一个规则的最开始的位置
$ : 永远都是写在一个规则的末尾的位置
注: ^和$也规定了匹配内容的字符串的长度
例子:
判断手机号的: ^[1][3-8]d{9}$ # 1开头,第二位是3-8的任意数字,第三位至第十一位任意数字组合,最后以为是以数字结尾
| : 或 , 要注意的是 永远要把长的规则放到左侧
() : 分组
: 转义,如果是有意义的字符对其进行转义让它成为普通字符,如.(表示任意字符) . ( 只代表一个点 ),如\n 表示' '
例: www.(baidu|zezhou).com # 匹配www.baidu.com或www.zezhou.com,如果不加()分组,是www.baidu或zezhou.com
量词: # 在量词的范围内尽可能多的匹配
{n} : 匹配n次
{n,} : 匹配至少n次或更多
{n,m} : 匹配n-m次
? : 匹配0次或1次
+ : 匹配1次或多次
* : 匹配0次或多次
例子:
1.匹配整数
解释:个位或更多位,都不符合匹配是否为0,*这个需要注意,可以有可以没有 ^([1-9]d*|0)$ 2.匹配小数 ^(d+.d+)$ 3.匹配整数及小数 ^(d+(.d+)?)$ 4.匹配身份证号 ^([1-9]d{14}(d{2}[dxX])?)$
贪婪匹配:尽可能多的匹配
惰性匹配:尽可能少的匹配
例子:
字符串:'asdfdsfsdxxxxxxbbbb' a.*x # asdfdsfsdxxxxxxbbbb # 贪婪匹配,回溯算法, .* 直接匹配到字符串结尾,遇到x回到最后一个x位置 a.*?x # asdfdsfsdx # 惰性匹配 , 挨个匹配是否下个字符是x,遇到x结束
python得re模块使用: