正则表达式

先介绍一款在线测试工具 http://tool.chinaz.com/regex/

说到正则,只和字符串相关,因为要匹配的为只是个可变的值

1.字符组

[0-9],表示0-9这个范围的数字,和0123456789一样

[a-z] , 小写字母a到z

[A-Z] ,大写字母a到z

[0-9a-fA-F] ,匹配数字及大小写字母

2.字符

.    匹配除换行符以外得任意字符

w  匹配字母或数字或下划线 (不够严谨尽量少用,个人感觉[0-9a-fA-F_]最合适)

W 匹配非数字字母下划线

s   匹配任意空白符

S   匹配非空白符

d    匹配数字

D   匹配非数字

   匹配一个换行符

    匹配一个制表符

   匹配一个单词的结尾

^    匹配字符串的开始

$    匹配字符串得结尾

a|b  匹配字符a或者b  (较长得字符组要写在前面,写到后面永远匹配不到)

()    匹配括号内的一个表达式,也表示一个组

[...]  匹配字符中的字符

[^...] 匹配除了字符串中字符的所有字符

3.量词

*          重复零次或更多次

+    重复一次或者更多次

?         重复零次或一次

{n}      重复n次

{n,}     重复n次或更多次

{n.m}  重复n次到m次

4.转义字符

在正则表达式中,有很多有特殊意义的是元字符,比如d和s等,如果要在正则中匹配正常的"d"而不是"数字"就需要对""进行转义,变成'\'。

在python中,无论是正则表达式,还是待匹配的内容,都是以字符串的形式出现的,在字符串中也有特殊的含义,本身还需要转义。所以如果匹配一次"d",字符串中要写成'\d',那么正则里就要写成"\\d",这样就太麻烦了。这个时候我们就用到了r'd'这个概念,此时的正则是r'\d'就可以了。

5.贪婪匹配

贪婪匹配:在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配

在量词后面加上?,转换成非贪婪模式

*?  重复任意次,但尽可能少重复

+? 重复一次或更多次,但尽可能少重复

?? 重复0次或一次,但尽可能少重复

{n,m}?  重复n次到m次,但尽可能少重复

{n,}?     重复n次以上,但尽可能少重复

原文地址:https://www.cnblogs.com/beihan/p/9432815.html