多个字符的匹配以及一些简单的小案例匹配练习
多个字符的匹配:
1)*:可以匹配0个或者任意多个字符
text = '09asd+-sad/+' ret = re.match('\d*',text) print(ret.group())
匹配出来的结果为 09,其中可以匹配0个的意思是:当匹配的字符串中没有匹配内容,不会抛出错误,会显示空。
2)+:匹配一个或者多个字符
text = 'a25sdzcs' ret = re.match('\w+',text) print(ret.group())
当匹配不出,即匹配出0个时会报错。
3)?:匹配到一个或者0个(要么没有要么只有一个)
text = 'abcd' ret = re.match('\w?',text) print(ret.group())
4){m}:匹配m个字符
text = 'a25sdzcs' ret = re.match('\w{2}',text) print(ret.group())
5){m,n}:匹配m到n个字符(如果字符够,则匹配到最多n个)
text = 'abcda2' ret = re.match('\w{2,5}',text) print(ret.group())
6)^脱字号:表示以...开始(放在[ ]中表示取非)
text = "182581530x558 " ret = re.search("^x",text) print(ret.group())
其中.search()方法区别.match()方法是:match()是从第一个字符开始匹配,若匹配不到直接抛出错误;而search()则不会,只要字符串中有所匹配内容,就可以匹配。
本例子,因为用了^脱字号,所以无法匹配出以x开头的字符,导致匹配不出。
7)$:表示以...结尾:
text = "xxxxx@163.com" ret = re.match("\w+@163.com$",text) print(ret.group())
与 + 混合使用。
8)|:表示匹配多个字符或者表达式,即 或 的意思。(多个需要用圆括号括起来)
text = "https://www.baidu.com" ret = re.match("(http|https|ftp)://.+",text) print(ret.group())
9)贪婪模式与非贪婪模式:(贪婪模式:尽量多得匹配;反之。)
text = "<h1>标题</h1>" ret = re.match("<.+?>",text) # .+ 匹配到的是 h1>标题</h1;加上?后变为非贪婪模式。 print(ret.group())
小案例练习:
1)粗略匹配第二代身份证号(18位):
text = "25654119940109123x" ret = re.match("\d{17}[\dxX]",text) print(ret.group())
2)粗略验证url:
text = "http://www.weather.com.cn/textFC/gat.shtml" ret = re.match("(http|https|ftp)://.+",text) print(ret.group())
3)粗略验证手机号码:
text = "13410811054" ret = re.match("1[3578]\d{9}",text) print(ret.group())
4)粗略验证邮箱:
text = "qqwez123_@qq.com" ret = re.match("\w+@[a-z0-9]+\.(com|cn)$",text) print(ret.group())