14.正则

1.re模块

在Python中需要通过正则表达式对字符串进行匹配的时候,可以使用一个模块来操作,名字为re

1.1.findall方法

findall方法:
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表

import re
st = '帅哥,靓仔,美女,靓妹'
st1 = re.findall('靓',st)#查找所有的数据,查找到的数据全部都拿出来
print(st1)
结果:
['靓', '靓']

1.2.match方法

match方法:
尝试从字符串的起始位置匹配一个模式,匹配成功 返回的是一个匹配对象(这个对象包含了我们匹配的信息),如果不是起始位置匹配成功的话,match()返回的是空

import re
st = '帅哥,靓仔,美女,靓妹'
st1 = re.match('靓',st)#要从起始位置开始找,起始位置不是这个字符串的话,就为None
print(st1)
结果:
None

import re
st = '帅哥,靓仔,美女,靓妹,帅帅'
st1 = re.match('帅',st)#从起始位置开始查找,查找到就返回一个对象,包含数据信息
print(st1)
结果:
<_sre.SRE_Match object; span=(0, 1), match='帅'>

1.3.search方法

search方法:
扫描整个字符串,匹配成功 返回的是一个匹配对象(这个对象包含了我们匹配的信息)

import re
st = '帅哥,靓仔,美女,靓妹,帅帅'
st1 = re.search('帅哥',st)#扫描整个字符串,只返回一个匹配对象
print(st1)
结果:
<_sre.SRE_Match object; span=(2, 4), match='帅哥'>

1.4.sub方法

sub方法:
替换

import re
st = '帅哥,靓仔,美女,靓妹,帅帅'
st1 = re.sub('帅','丑',st)#替换
print(st1)
结果:
丑哥,靓仔,美女,靓妹,丑丑

2.元字符

符号本身具有特别的含义

2.1.单字符匹配

.:匹配任意1个字符(除了\n)

import re
st = '帅哥,靓仔,美女,靓妹,'
st1 = re.findall('靓..',st)
print(st1)
结果:
['靓仔,', '靓妹,']

[]:匹配[]中列举的字符

import re
st = '浏览1去哦去哦,浏览3问问,浏览如4题9如题'
st1 = re.findall('[1-9]',st)#[]里面也可以放字母
print(st1)
结果:
['1', '3', '4', '9']

\d:匹配数据,即0-9

import re
st = '帅1哥,靓3仔,美5女,靓9妹,'
st1 = re.findall('\d',st)#\d相当于[0-9]
print(st1)
结果:
['1', '3', '5', '9']

\D:匹配非数字,既不是数字

import re
st = '帅1哥,靓3仔,美5女,靓9妹,'
st1 = re.findall('\D',st)
print(st1)
结果:
['帅', '哥', ',', '靓', '仔', ',', '美', '女', ',', '靓', '妹', ',']

\s:匹配空白,即空格,tab键

import re
st = ' 帅1哥,靓 3仔,美5女,靓9妹,'
st1 = re.findall('\s',st)
print(st1)
结果:
[' ', ' ']

\S:匹配非空白

import re
st = ' 帅1哥,靓 3仔,美5女,靓9妹,'
st1 = re.findall('\s',st)
print(st1)
结果:
['帅', '1', '哥', ',', '靓', '3', '仔', ',', '美', '5', '女', ',', '靓', '9', '妹', ',']

\w:匹配单词字符,即a-z、A-Z、0-9、_

import re
st = ' 帅1哥,靓 3仔,美5女,靓9妹,'
st1 = re.findall('\w',st)
print(st1)
结果:
['帅', '1', '哥', '靓', '3', '仔', '美', '5', '女', '靓', '9', '妹']

\W:匹配非单词字符

import re
st = ' 帅1$哥,靓 3#@仔,美5女,靓9妹,'
st1 = re.findall('\W',st)
print(st1)
结果:
[' ', '$', ',', ' ', '#', '@', ',', ',', ',']

2.2.代表数量的元字符

*:匹配前一个字符出现0次或者无限次,即可有可无

import re
st = 'abbbc'
st1 = re.findall(r'ab*c',st)#匹配b这个字符有0~无数次
print(st1)
结果:
['abbbc']

+:匹配前一个字符出现1次或者无限次,即至少有1次

import re
st = 'abbbc'
st1 = re.findall(r'ab+c',st)
#匹配b这个字符有0~无数次,至少出现一次b这个字符,如果超过st里面出现的3个字符的话,那么就会返回空
print(st1)
结果:
['abbbc']

?:匹配前一个字符出现1次或者0次,即要么有1次,要么没有

import re
st = 'abbbc'
st1 = re.findall(r'abbbb?c',st)#匹配b这个字符出现1次或者0次,即要么有1次,要么没有
print(st1)
结果:
['abbbc']

{m}:匹配前一个字符出现m次
{m,n}:匹配前一个字符出现m到n次

import re
st = 'abbbc'
st1 = re.findall(r'ab{1,100}c',st)
#必须要填准确的数值,如果不是准确数字就为[]
#或者一个大概超前的一个数字,{1,100}意思是有1个以上,100个以下个b;{,100}从0开始
#{0,}从0开始到无穷大
print(st1)
结果:
['abbbc']

2.3.表示边界的元字符

匹配字符串结尾
^:匹配字符串开头

import re
st = 'abbcabbc'
st1 = re.findall(r'^abbc',st)#必须要跟字符串开头abbc相同才能匹配得到
print(st1)
结果:
['abbc']

$:匹配字符串结尾

import re
st = 'abbcabbc'
st1 = re.findall(r'bc$',st)#必须要跟字符串结尾bc相同才能匹配得到
print(st1)
结果:
['bc']

\b:匹配一个单词的边界
空格相当于边界

import re
st = 'abbc abbcabbc ac'#空格相当于边界
st1 = re.findall(r'\bab',st)
print(st1)

\B:匹配非单词边界
空格相当于边界

import re
st = 'abbcabbcabbc ab'
st1 = re.findall(r'\Bab',st)
print(st1)
结果:
['ab', 'ab']

2.4.分组匹配

|:匹配左右任意一个表达式

import re
st = 'ac1ab2 ab3 ac bbc br'
st1 = re.findall(r'ac|ab|br',st)
print(st1)
结果:
['ac', 'ab', 'ab', 'ac', 'ac', 'br']

(ab):将括号中字符作为一个分组

import re
st = 'c3ac1 ab2 ab3 ac3 bbc3 br'
st1 = re.findall(r'c(3)',st)
print(st1)
结果:
['3', '3', '3']

3.贪婪与非贪婪

3.1.贪婪

能拿到的全部拿走

import re
st = 'aaaaaaaaaaaaa'
st1 = re.findall(r'a{2,5}',st)#能拿多少就拿多少,{2,5}2~5个,以最多5个为一组
print(st1)
结果:
['aaaaa', 'aaaaa', 'aaa']

3.2.非贪婪

import re
st = 'aaaaaaaaaaaaa'
st1 = re.findall(r'a{2,5}?',st)#能拿多少就拿多少,{2,5}2~5个,以最少2个为一组,不够2个就不拿了
print(st1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值