正则表达式通俗点就是按照一定的规则,从某个字符串中匹配出想要的数据。这个规则就是正则表达式。
语法介绍
匹配字符串
text = 'hello world'
ret = re.match("he",text)
print(ret.group())
# he
点(.)匹配任意的字符
text = 'hello world'
ret = re.match(".",text)
print(ret.group())
# h
\d匹配任意数字
text = "28043234431"
ret = re.match('\d',text)
print(ret.group())
# 2
\D匹配任意非数字
text = "d280d43234431"
ret = re.match('\D',text)
print(ret.group())
\s匹配的是空白字符(包括:\n,\t,\r和空格)
text = "\t"
ret = re.match('\s',text)
print(ret.group())
##\S匹配任意非空白字符串
text = "S\t"
ret = re.match('\S',text)
print(ret.group())
\w匹配字母和数字和下划线
text = "_"
ret = re.match('\w',text)
print(ret.group())
\W匹配的是和\w相反的
text = "**"
ret = re.match('\W',text)
print(ret.group())
[]组合
[]匹配方括号内的条件
text = "0316-13643212345"
ret = re.match('[\d\-]+',text)
print(ret.group())
# 0316-13643212345
上边的集中使用规则,例如
\d: [0-9]
\D: [^0-9]
\w: [0-9a-zA-Z]
\W: [^0-9a-zA-Z]
#多字符匹配
* (可以匹配0或者任意多个字符)
text = "0316-13643212345"
ret = re.match('\d*',text)
print(ret.group())
# 0316
+:可以匹配1个或者多个字符
text = "0316-13643212345"
ret = re.match('\d+',text)
print(ret.group())
# 0316
?:出现0或1次
text = "0316-13643212345"
ret = re.match('\d?',text)
print(ret.group())
# 0
{}出现指定次数
text = "0316-13643212345"
ret = re.match('\d{3}',text)
print(ret.group())
# 013
{m,n}:匹配m-n个字符
text = "0316-13643212345"
ret = re.match('\d{2,3}',text)
print(ret.group())
#013
最少m个,最大n个
上边都是一些常用的功能键,下边我们就实战一下。
验证手机号
text = "13643333333"
ret = re.match('1[34678]\d{9}',text)
print(ret.group())
# 13643338850
验证邮箱
test_love_123@163.com 我就随便来个邮箱
text = "test_love_123@163.com"
ret = re.match('\w+@\w+\.[a-zA-Z]+',text)
print(ret.group())
验证URL
我们打开百度,搜索正则表达式,找一个连接
text = "https://baike.baidu.com/item/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1700215?fr=aladdin"
ret = re.match('(http|https)://\S+',text)
print(ret.group())
身份证号
简单来算,就是前17未是数字,最后一位是数字或者xX
text = "13022210032101120X"
ret = re.match('\d{17}[\dxX]', text)
print(ret.group())
^(脱字号):表示以…开始:
text = "hello"
ret = re.match('^h',text)
print(ret.group())
匹配163.com的邮箱
text = "xxx@163.com"
ret = re.search('\w+@163\.com$',text)
print(ret.group())
## xxx@163.com
|:匹配多个表达式或者字符串:
text = "hello|world"
ret = re.search('hello',text)
print(ret.group())
贪婪模式和非贪婪模式
贪婪模式会尽量匹配多的内容,而非贪婪模式则尽可能匹配少的信息。
text = "0123456"
ret = re.match('\d+',text)
print(ret.group())
# 因为默认采用贪婪模式,所以会输出0123456
# 0123456
# 可以改成非贪婪模式,那么就只会匹配到0。示例代码如下:
text = "0123456"
ret = re.match('\d+?',text)
print(ret.group())
#0