实例:
匹配字符串:
import re
content = 'Hello 123 4567 World_This is a Regex Demo'
# match()
# 第一个参数传入正则表达式,第二个参数传入要匹配的字符串
result = re.match('^Hello\s\d{3}\s\d{4}\s\w{10}',content)
print(result)
# group可以输出匹配的内容
print(result.group())
# span()方法可以输出匹配的范围
print(result.span())
下面介绍一下“'^Hello\s\d{3}\s\d{4}\s\w{10}'”的用法:
^ 是匹配字符串的开头,也就是匹配以Hello开头
\s 是匹配空白字符,用来匹配目标字符串的空格
\d 是匹配数字,三个\d匹配到了123
\d{4} 调用四次前面的方法
\w{10} 匹配10个字母以及下划线
匹配内容
content = 'http://weibo.com/comment/kEraCN'
result1 = re.match('http.*?comment/(.*?)',content)
result2 = re.match('http.*?comment/(.*)',content)
print('result1',result1.group())
print('result2',result2.group())
观察输出结果,可以看到.*?没有匹配到任何内容,.*则进来匹配多的内容,得到了匹配结果。
修饰符
实例:
import re
content = '''Hello 1234567 World_this
is a Regex Demo
'''
result = re.match('^He.*?(\d+).*?Demo$',content,re.S)
print(result.group())
re.I 使匹配对大小写不敏感
re.L 使本地化识别匹配
re.M 多行匹配,影响^和$
re.S 使.匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。
常用的有re.S和re.I
转义匹配
实例:
import re
content = '(百度)www.baidu.com'
# 当遇到用于正则匹配的特殊字符时,在前面加反斜线转义一下即可。
result = re.match('\(百度\)www\.baidu\.com',content)
print(result)
提取链接
import re
content = '<a href="提示我这个链接地址">sflkj</a>'
Pattern = re.compile(r'href="(.*?)"')
result = Pattern.findall(content)[0]
print( result)
验证手机号是否正确
import re
# 验证手机号是否正确
phone_num = re.compile('^(13\d|14[5|7]|15\d|166|17[3|6|7]|18\d)\d{8}$')
while True:
phone = input('请输入您的手机号:')
result = re.search(phone_num, phone)
if result:
print('正常手机号',phone)
else:
print('不是手机号')
实例
import re
content = "123#456@abccccc@d"
pattern = re.compile(r'@|#')
result = pattern.split(content)
print(result)
content = "(a+b)*(a1-b1)/2"
# pattern = re.compile(r'[a-zA-Z]+\d*')
pattern = re.compile(r'[a-z]\w*')
result = pattern.findall(content)
print(result)
加号+
和星号*
的作用
元字符+
表示之前紧邻的元素可以出现一次或多次。
元字符*
表示之前紧邻的元素可以出现任意多次,甚至不出现。
*
表示匹配尽可能多的次数。+
的意思是匹配尽可能多的次数,但是至少要匹配一次
,如果连一次也无法匹配,则匹配失败。
匹配这样一段字符串:
<a οnclick="AddTab('/Cjjjy_Action.do?activity=getData&reportDm=SB_CJJYFJSSB&ssq=YD&fzlx=2&sssq_q=20190201&sssq_z=20190228','城建税、教育费附加、地方教育附加税(费)申报');">城建税、教育费附加、地方教育附加税(费)申报</a>
匹配a标签中的空号中的两个字符串。
re.findall("AddTab\('(.*?)'\)", res)