python笔记25(正则表达式课程一)

今日内容

1、mro算法和super

super()表示执行父类的方法。

2、正则表达式和re模块

  1. re模块本身只是用来操作正则表达式。

(1)正则表达式

  • 匹配字符串
- 一个人的电话号码
- 一个人的身份证号
- 一台机器的ip地址
  • 表单验证
验证用户输入的信息是否合法。
如:11位全数字1开头,第二个数字是3-9数字。
  • 爬虫
从网页源码中获取一些链接、重要的数据。

(4)正则表达式规则(元字符,量词)

http://tool.chinaz.com/regex/,正则表达式测试。
第一条规则:本身是哪个字符,就匹配字符串中哪个字符。
第二条规则:字符组【字符1字符2】,一个字符组就是代表匹配一个字符,只要这个字符出现在字符组里,那么就说明这个字符能匹配。
            字符组中还可以使用范围,所有的范围都必须遵循ascii从小到大。
            【0-9】,【a-z】,[A-Z],[A-z],[a-zA-Z]#匹配所有大小写,[0-9X]#匹配0-9和x。
[0-9],等价\d,\是转义符,转义符转义了d,让d能够匹配所有0-9之间的数字。
\w:表示大小写字母,数字,下划线
\s:表示空白,空格,换行符,制表符
\t:匹配制表符
\n:匹配换行符
\D:表示所有非数字
\W:表示除数字、字母、下划线之外的所有字符
\S:表示非空白
#\d(digit),\w(word),\s(space),\t(table),\n(next)
#.(点)表示除了换行符之外任意内容。
#[],[^],尖角号表示非。
#[]字符组:只要在中括号内的所有字符都是符合规则的字符。
#[^]非字符组:只要在中括号内的所有字符都是不符合规则的字符
#[],[^],^表示一个字符的开始;$表示一个字符的结束。
#^xxx$:匹配xxx内容
#| :表示或,注意两个规则有重叠部分,总是长的在前面,短的在后面。
#()表示组,将一部分正则归为一组。|这个符合的作用域就缩小了。
#(),|或的符号,匹配两边所有的内容。如果限制匹配范围,使用括号()。
#匹配点的时候,需要使用\转义符号,取消.点的特殊含义(除换行符之外所有内容)
#【\d】,【0-9】,\d,没区别,都是匹配一位数字。
#[\d\D],[\w\W],[\S\s]匹配所有一切字符

3、量词

{n}:表示出现n次;1[3-9]\d{9}
{n,}表示出现至少n次
{n,m}表示出现n-m次
?:表示匹配0次或者1次
+:表示1次或者多次
*:表示匹配0次或者多次
#匹配两个整数:\d{2}
#匹配两位小数:\n+\.\d{2}
#匹配一个整数或者小数:
方法1:\d+\.\d+|\d+;
方法2:\d+\.?\d* 
方法3:\d+(\.\d+)?
#表示可有可无的使用(?),比如此处的小数点。
#表示可有可无(*),但是可以有多个,比如小数点后n位。


默认贪婪匹配,总是会在符号量词条件的范围内尽量多匹配。
#\d{7,12}
# <html>adljdkjsljdlj</html>lhaljaln
#<.+>,匹配上述的内容为:<html>adljdkjsljdlj</html>,解释:回溯算法,匹配第一个<,.+匹配任意内容,到最后,从最后向前回溯至倒数第一个>。这里面体现了py的贪婪匹配原则。


非贪婪匹配:惰性匹配
总是匹配符合条件范围内尽量小的字符串。?,问好
如:\d{2,3}?,这里就是取两个数字。
如:\d+?3,这里遇到3匹配。

元字符 量词 ? x(任意内容)
表示按照元字符规则在量词范围内匹配,一旦遇到x就停止。
常用:.*?x,匹配任意的内容,任意多次,遇到x就停止。

#元字符
#元字符量词
#元字符量词?,非贪婪
#\d+?x,.*?x#(这里的+,*,表示量词)


案例:
# 身份证号
# 15位  全数字 首位不为0
# 18位  前17位全数字 首位不为0  最后一位可能是x和数字
[1-9](\d{16}(\d|x)|\d{14})
[1-9](\d{16}[\dx]|\d{14})
[1-9]\d{14}(\d{2}[\dx])?

猜你喜欢

转载自www.cnblogs.com/cuiyongchao007/p/12424210.html