1. 正则表达式常用匹配规则
1.1 匹配某个字符串
text = 'hello' ret = re.match('he',text)#math从字符串起始位置开始匹配,起始位置未匹配返回None print(ret.group()) >> he
以上便可以在hello中,匹配出he。
1.2 点(.)匹配任意的字符
text = "ab" ret = re.match('.',text) print(ret.group()) >> a
但是点(.)不能匹配换行符。示例代码如下:
text = "\n" ret = re.match('.',text) print(ret.group()) >> AttributeError: 'NoneType' object has no attribute 'group'
ret = re.match('.', text, re.DOTALL)#加参数re.DOTALL,点(.)就可以匹配包换换行符的任意字符
print(ret.group())
1.3 \d匹配任意的数字
text = "123" ret = re.match('\d',text) print(ret.group()) >> 1
1.4 \D匹配任意的非数字
text = "a" ret = re.match('\D',text) print(ret.group()) >> a
而如果text是等于一个数字,那么就匹配不成功了。示例代码如下:
text = "1" ret = re.match('\D',text) print(ret.group()) >> AttributeError: 'NoneType' object has no attribute 'group'
1.5 \s匹配的是空白字符(包括:\n,\t,\r和空格)
text = "\t" ret = re.match('\s',text) print(ret.group()) >> 空白
1.6 \w匹配的是a-z和A-Z以及数字和下划线
text = "_" ret = re.match('\w',text) print(ret.group()) >> _
而如果要匹配一个其他的字符,那么就匹配不到。示例代码如下:
text = "+" ret = re.match('\w',text) print(ret.group()) >> AttributeError: 'NoneType' object has no attribute
1.7 \W匹配的是和\w相反的
text = "+" ret = re.match('\W',text) print(ret.group()) >> +
而如果你的text是一个下划线或者英文字符,那么就匹配不到了。示例代码如下:
text = "_" ret = re.match('\W',text) print(ret.group()) >> AttributeError: 'NoneType' object has no attribute
1.8 []组合的方式,只要满足中括号中的某一项都算匹配成功
text = "0731-88888888" ret = re.match('[\d\-]+',text) print(ret.group()) >> 0731-88888888
之前讲到的几种匹配规则,其实可以使用中括号的形式来进行替代:
1.9 匹配多个字符
-
*:可以匹配0或者任意多个字符。示例代码如下:text = "0731" ret = re.match('\d*',text) print(ret.group()) >> 0731
以上因为匹配的要求是
\d,那么就要求是数字,后面跟了一个星号,就可以匹配到0731这四个字符。 -
+:可以匹配1个或者多个字符。最少一个。示例代码如下:text = "abc" ret = re.match('\w+',text) print(ret.group()) >> abc
因为匹配的是
\w,那么就要求是英文字符,后面跟了一个加号,意味着最少要有一个满足\w的字符才能够匹配到。如果text是一个空白字符或者是一个不满足\w的字符,那么就会报错。示例代码如下:text = "" ret = re.match('\w+',text) print(ret.group()) >> AttributeError: 'NoneType' object has no attribute
-
?:匹配的字符可以出现一次或者不出现(0或者1)。示例代码如下:text = "123" ret = re.match('\d?',text) print(ret.group()) >> 1
-
{m}:匹配m个字符。示例代码如下:text = "123" ret = re.match('\d{2}',text) print(ret.group()) >> 12
-
{m,n}:匹配m-n个字符。在这中间的字符都可以匹配到。示例代码如下:text = "123" ret = re.match('\d{1,2}',text) prit(ret.group()) >> 12
如果text只有一个字符,那么也可以匹配出来。示例代码如下:
text = "1" ret = re.match('\d{1,2}',text) prit(ret.group()) >> 1
验证手机号码:手机号码的规则是以1开头,第二位可以是34587,后面那9位就可以随意了。示例代码如下: text = "18570631587" ret = re.match('1[34587]\d{9}',text) print(ret.group()) >> 18570631587 而如果是个不满足条件的手机号码。那么就匹配不到了。示例代码如下: text = "1857063158" ret = re.match('1[34587]\d{9}',text) print(ret.group()) >> AttributeError: 'NoneType' object has no attribute 验证邮箱:邮箱的规则是邮箱名称是用数字、数字、下划线组成的,然后是@符号,后面就是域名了。示例代码如下: text = "hynever@163.com" ret = re.match('\w+@\w+\.[a-zA-Z\.]+',text) print(ret.group()) 验证URL:URL的规则是前面是http或者https或者是ftp然后再加上一个冒号,再加上一个斜杠,再后面就是可以出现任意非空白字符了。示例代码如下: text = "http://www.baidu.com/" ret = re.match('(http|https|ftp)://[^\s]+',text) print(ret.group()) 验证身份证:身份证的规则是,总共有18位,前面17位都是数字,后面一位可以是数字,也可以是小写的x,也可以是大写的X。示例代码如下: text = "31131118908123231X" ret = re.match('\d{17}[\dxX]',text) print(ret.group())