前言
本篇文章的主要内容是使用Python匹配ASCII字符串的各种姿势。
基本知识
ASCII码对照表.
元字符对照表
什么是元字符
如上面元字符对照表里的所有字符在正则中表现是一个范围而不能作为字符匹配,例如[0-9]之中的-用来表示0到9的一个范围,而不能匹配横线字符。
什么是转义
像$、^ 这类元字符,在正则中有特殊的含义,有的时候并不需要表示其特殊含义只想表示普通字符的含义,此时就必须对元字符做转义,可以使用反斜杠转义元字符,如^经过转义后变为 \ ^。
详细解读正则的使用
测试页面
将以上代码保存为test.txt
将以上代码保存为test.py用来测试正则表达式的功能。
功能解释
获取代码中的手机号
正则表达式可以有如下集中方式:
1 ([0-9]{11})
2 (\d{11})
3 ([\x30-\x40]{11})
分别使用以上正则进行测试,如下图:
由上可知,表示数字有三中方式分别是[0-9]、\d、[\x30-\x40],数字0的ASCII值在表中查出是48,转为十六进制为30,同理9的ASCII值的十六进制是40,所以就有了[\x30-\x40]的用法,通过这种方式我们可以匹配任意ASCII码表中的字符。下面我们试着匹配测试文件中的冒号,结果如下:
花括号的用法在元字符表中有三中方式,测试结果如下:
括号作用是把括号内的表达式做子表达式来用,在元字符表中有四种用法,测试结果如下:
对于这个测试结果,后面三中不是很理解,希望有懂得给我讲讲。
中括号的作用是表示字符的范围,在元字符表中有四种用法,测试结果如下:
测试发现,[a-d]与[abcd]的结果一样,[a-z]与[abcd]的结果一样,前面的作用就是获取包含adcd的字符串,后面的作用就是获取不包含abcd的字符串。
获取源文件中的邮箱
测试结果如下:
由测试结果可以看出来,\w和[a-zA-Z0-9]的作用是一样的,相比之下*和+的结果一样,但是他们稍微又一点不同就是 *表示为可以没有,而+为至少匹配一个。而 *又等同于{0,},+等同于{1,}。由于\s的作用是匹配空白字符,所以结果中虽然出现了邮箱地址,但是后面多了一个标签,由于邮箱开始处有空格而结尾处没有空白字符,所以出现这样的结果。还有就是[^\s]与[\S]的结果是一样的,\s与\S是互反的关系。测试中的点号前面加了反斜杠,由于点号是元字符可以替代任何除了空行以外的所有字符,所有使用反斜杠来对其进行转义来匹配点号,其他元字符用法类似。
一个正则获取woshi和myh0st
测试结果如下;
由于woshi和myh0st之间有几个空行,所以可以用\n和\s匹配空行。\f、\v、\r、\t用法相同。
获取所有链接
测试结果如图:
我们看到有问号,问号是个量词,表示最多一个,也可能不出现。这个就与{0,1}的作用相同了。
获取文字的标签名
测试结果如图:
\1的作用是对前面括号内获取的内容的引用,可以用在处理html页面的时候,获取标签名字的操作。
需要转义的字符
除了上面说的单独出现的元字符,小括号和中括号也需要转义。