欢迎来到Louis的博客

人生三从境界:昨夜西风凋碧树,独上高楼,望尽天涯路。 衣带渐宽终不悔,为伊消得人憔悴。 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。
扩大
缩小

正则表达式

正则表达式是一种规则,只作用于字符串,正则是一套独立的规则,也可以说是一套独立的语言,几乎现有的高级语言都引入了正则的使用,python也不例外,先看看正则的语法特性。

1. 正则一般都用来做什么?

       1⃣️. 从大段的文字中找到符合规则的内容并进行提取。

       日志分析:从nginx日志中找出当前访问有个某个指定url的日志并进行保存。

网页爬虫:获取某网页所有图片的url地址

       2⃣️.判断某个字符串是否完全符合规则

       表单验证:注册时判断用户名,密码,身份证号,手机号是否符合规则

2.正则表达式的语法及规则

#规则, 字符串, 从字符串中找到符合规则的内容

1⃣️字符组:[] 写在中括号中的内容,出现在下面某一个字符的位置上都死符合规则的。

[0-9] 匹配数字
[a-z] 匹配小写字母
[A-Z] 匹配大写字母
[a-zA-Z] 匹配大小写字母
[a-zA-Z0-9] 匹配大小写字母和数字
[a-zA-Z0-9_] 匹配大小写字母和数字下划线

 

 

 

 

 

 

 

2⃣️元字符: 在正则表达式中包含特殊意义的字符

\w 匹配数字字母下划线(word) [a-zA-Z0-9]
\d 匹配所有的数字(digit) [0-9]
\s 匹配所有的空格 换行符 制表符 空格 [\n\t ]
\n 匹配换行符  
\t  匹配制表符  
\W 匹配非数字字母下划线的其他字符 与\w取反
\D 匹配非数字的所有其他字符 与\d取反
\S 匹配所有非空格的字符 与\s取反
^  匹配以指定字符开头  
$ 匹配以指定字符结尾  
.  匹配除换行符之外的所有字符  
\b  匹配单词边界  
[] 只要出现在括号中的都可以被匹配  
[^] 只要不出现在括号中的都可以被匹配 与[]取反
a|b  或,符合规则a或者规则b的都可以被匹配  
() 分组,表示给几个字符加上量词约束的需求时,就给这些量词分在一个组  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a|b 元字符规则:

如果a规则是b规则的一部分,且a规则比b规则要苛刻,就把a规则写在前面。

将更复杂\更长的规则放在前面。 

 

3⃣️量词:修饰前面的元字符或者普通字符,限定字符出现的次数

{n}   量词之前的字符出现n次
{n,} 量词之前的字符至少出现n次
{n,m}

表示这个量词之前的字符出现n-m次

?   匹配量词之前的字符出现0次或一次,表示可有可无
+ 匹配量词之前的字符出现至少1次 或者 多次

匹配量词之前的字符出现0次 或者 多次

 

 

 

 

 

 

 

 

正则表达式的匹配特点:

贪婪匹配(默认):它会在允许的范围内取最长的结果

非贪婪模式/惰性匹配: 在量词后面加?

.*?x 匹配任意非换行符任意长度,知道遇到x就停止

 

正则在线测试工具 http://tool.chinaz.com/regex/

匹配整数 \d+

匹配小数 \d+\.\d+

匹配小数或整数  \d+\.\d+|\d+  或\d+(\.\d+)?

匹配身份证号 [1-9]d[16][\dx]|[1-9]\d{14}  或  [1-9]\d[14](\d{2}[\dX])?

 

Note:关于字符串挪到python中的转义的问题,只需要在工具中测试完毕,确认规则无误后,挪到python中在字符串的外面加上r,r""即可

 

 

补充:

零宽断言

(?=exp)也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp。比如\b\w+(?=ing\b),匹配以ing结尾的单词的前面部分(除了ing以外的部分),如查找I'm singing while you're dancing.时,它会匹配sing和danc。

(?<=exp)也叫零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp。比如(?<=\bre)\w+\b会匹配以re开头的单词的后半部分(除了re以外的部分),例如在查找reading a book时,它匹配ading。

posted on 2018-08-16 16:53  Louiszj  阅读(95)  评论(0编辑  收藏  举报

导航