Python正则表达式

import re

# 1.match从起始位置开始匹配
text = 'python'
res = re.match("py",text)
print(res.group())

#2 .匹配一个任意字符,无法匹配\n换行符号
text2 = "点python"
res2 = re.match('.',text2)
print(res2.group())

#3. \d 只匹配数字
text3= '25python'
res3 = re.match('\d',text3)
# 等价  \d === [0-9]
res3 = re.match('[0-9]',text3)
print(res3.group())

# 4. \D 除了数字以外都匹配
text4 = 'D25python'
res4 = re.match('\D',text4)
# 等价 \D === [^0-9]
print(res4.group())
# 匹配所有字符
ree = re.match('[\d\D]+',text4)
print('27', ree.group())

# 5. \s 匹配空白字符  如\n \t \s 空格
text5 = '\tpython'
res5 = re.match('\s',text5)
print(res5.group())

# 6. \w 匹配大小写字母、数字、下划线
text6 = '_7python'
res6 = re.match('\w', text6)
print(res6.group())

# 7. \W 和 \w互补
text6 = '*7python'
res6 = re.match('\W', text6)
# 等价 \W === [^0-9a-zA-Z]
res6 = re.match('[^0-9a-zA-Z]',text6)
print(res6.group())

# 8. [] 匹配中括号里面的字符,多内容匹配时,“或”运算思想 ,只要对象中含有一个内容就匹配一次
# /s是空格
text6 = '& 7python'
res6 = re.match('[&/s7]', text6)
print(res6.group())

# 9. * 号 匹配零个或多个字符,符合规则就一直往后匹配,直到不符合规则。如果第一个就不符合就匹配0次,返回none,且不报错
texts = '18183-9000-9000'
ress = re.match('[- \d]*', texts)
print(ress.group())

# 10. + 匹配一个或多个, 至少匹配一个,不符合规则会报错
texts = '18183-9000-9000'
ress = re.match('[\d]+', texts)
print(ress.group())

# 11. ? 匹配零个或一个
texts = '18183-9000-9000'
ress = re.match('[- \d]?', texts)
print(ress.group())

# 12. {n} 匹配n次
texts = '18183-9000-9000'
ress = re.match('[- \d]{6}', texts)
print(ress.group())

# 13. {m,n} 匹配m到n次,默认匹配最多次,m是保底,n是极限,匹配不到m次会报错
texts = '181-9|000-9000'
ress = re.match('[- \d]{2,6}', texts)
print(ress.group())

# 匹配所有字符
ree = re.match('[\d\D]+',text4)
print('27', ree.group())
# 匹配任意字符   [.]表示只匹配真实的点.本身
reee = re.match('.+',text)
print(reee.group())

# 电话号码  第一位是1,第二位是3-9,一共11位
tel = "13689759284"
re_tel = re.match('1[3-9][0-9]{9}',tel)
print(re_tel.group())

# 邮箱匹配
mail = 'zwnsyw@qq.com'
re_mail = re.match('\w+@[0-9a-z]+[.][comcn]+',mail)
print(re_mail.group())

# 14. search 从左往右匹配,返回第一个匹配结果
txt = "pythonpyy"
rs = re.search('pyy',txt)
print(rs.group())

# 15. ^在中括号里面,表示取反,在外面表示以什么字符开头
txt = "pythonpy"
rs = re.search('^pyt',txt)
print(rs.group())

# 16. $ 以特定的字符串为结尾
txt = "pythonpyy"
rs = re.search('pyy$',txt)
print(rs.group())

# 17. | ‘或’ 匹配多个表达式或者字符串   [|]认为里面是单个字符,匹配一次  (|)认为里面是一个长度的字符串
txt = "https://www.bilibili.com/video/"
rs = re.search('[http|https|ftp|file|video]',txt) # 单字符匹配一次
print(rs.group())
rs = re.search('[http|https|ftp|file|video]+',txt) # 匹配多次
print(rs.group())
rs = re.search('(http|https|ftp|file|video)+',txt) # 匹配多次
print(rs.group())

# 18. 贪婪模式和非贪婪模式 默认就是贪婪模式>=1  非贪婪模式 <=1 使用?实现
txt = '''
<tr class="host">
    <tr class='1'>host1</tr>
    <tr class='2'>host2</tr>
    <tr class='3'>host3</tr>
    <tr class='4'>host4</tr>
    <tr class='5'>host5</tr>
    <tr class='6'>爬虫</tr>
</tr>
'''
# 获取<tr class='host>
# 贪婪模式
rr = re.match('\n<tr[\d\D]+>',txt)
print(rr.group())

# 非贪婪模式
# 简单理解就是第一次遇到 ? 后面的字符就停下来
rr = re.match('\n<tr[\d\D]+?>',txt)
print(rr.group())

 

posted @ 2020-08-12 16:49  zwnsyw  阅读(241)  评论(0编辑  收藏  举报