re模块

re模块

import re

findall(正则表达式,待匹配字符串):

  • 返回所有满足匹配条件的结果,放在列表里
ret1 = re.findall('a', 'egg apple')
print(ret1)
['a']
ret2 = re.findall('[a-g]+', 'egg apple')
print(ret2)
['egg', 'a', 'e']

findall():会优先把匹配结果组里内容返回,如果想要输出整个匹配结果,需要用?:取消权限

ret = re.findall('www.(google|baidu).com', 'www.google.com')
print(ret)
['google']
ret = re.findall('www.(?:google|baidu).com', 'www.google.com')
print(ret)
['www.google.com']

如果要找特殊的字符,需要在字符串前面加上r

ret = re.finditer(r'\\.', r'ab2\tf4\s\nf5')
for i in ret:
    print(i.group())
\t
\s
\n

search(正则表达式,待匹配字符串):

  • 从前往后,找到第一个就返回,返回的变量需要调用group()才能得到结果
  • 如果没有,返回None,调用group()会报错
ret3 = re.search('a', 'egg apple')
if ret3:
    print(ret3.group())
a

如果group()中带参数n,那么就是打印第n组的结果

ret3 = re.search('^[1-9](\d{3}(\d{2}[0-9x]))$', '1234567')
if ret3:
    print(ret3.group())  # 打印匹配结果
    print(ret3.group(1))  # 打印第一组的结果,也就是(\d{3}(\d{2}[0-9x]))匹配的结果
    print(ret3.group(2))  # 打印第二组的结果,也就是(\d{2}[0-9x])匹配的结果
1234567
234567
567

还可以对组进行命名,用?P<name>

ret3 = re.search('^[1-9](?P<g1>\d{3}(\d{2}[0-9x]))$', '1234567')
if ret3:
    print(ret3.group('g1'))
    print(ret3.group(2))
234567
567
ret = re.search("(?P<g2>\d)\w(?P=g2)", "1a2b2b")
print(ret.group('g2'))
print(ret.group())
2
2b2

如果不给组命名,可以用’\m’,表示内容与前面第m组的内容一致

ret = re.search(r"<(\w+)>\w+<(\d+)><\2>","<h>hi<1><1>hello")
# \2表示和前面第二组也就是(\d+)中的内容要一样
print(ret.group(2))
print(ret.group())
1
<h>hi<1><1>

match(正则表达式,待匹配字符串):

  • 和search类似,只不过仅在字符串开始处进行匹配
  • 找到就返回,返的变量需要调用group()才能得到结果
  • 如果没有,返回None,调用group()会报错
ret4 = re.match('b', 'abc')
if ret4:
    print(ret4.group())  # 无任何输出,因为字符串'abc'的开头是'a'不是'b',ret4为None
ret5 = re.match('ab', 'abc defg ab')
if ret5:
    print(ret5.group())
ab

split(正则表达式,待匹配字符串):

  • 按正则表达式中的规则对待匹配字符串进行分割,将结果放在列表中
ret = re.split('a', 'abcdafg3')
print(ret)
['', 'bcd', 'fg3']
ret = re.split('[af]', 'abcdafg3')
print(ret)
['', 'bcd', '', 'g3']
  • 先将字符串'abcdafg3''a'分割,得到' ', 'bcd', 'fg3'
  • 再将' ', 'bcd', 'fg3''f' 分割得到'', 'bcd', '', 'g3'

在正则表达式中需要匹配部分加上()

  • 在正则表达式中需要匹配部分加上()之后所切出的结果和不加()是不同的
  • 没有():没有保留所匹配的项
  • 有():保留了匹配的项
ret = re.split('(a)', 'abcdafg3')  # 保留了'a'
print(ret)
['', 'a', 'bcd', 'a', 'fg3']

sub(regex,replace,str,num):

  • regex:正则表达式,想要替换的字符类型
  • replace:代替的字符
  • str:需要替换的字符串
  • num:替换的个数,默认全部替换
ret = re.sub('\d', 'p', 'a23le')
print(ret)
apple
ret = re.sub('\d', 'p', 'a23le',1)
print(ret)
ap3le

subn(regex,replace,str,num):

  • regex:正则表达式,想要替换的字符类型
  • replace:代替的字符
  • str:需要替换的字符串
  • num:替换的个数,默认全部替换
  • 返回元组(替换后的结果,替换的次数)
ret = re.subn('\d', 'p', 'a23le')
print(ret)
('apple', 2)
ret = re.subn('\d', 'p', 'a23le',1)
print(ret)
('ap3le', 1)

compile(正则表达式):

  • 将正则表达式编译成为一个 正则表达式对象
  • flags有很多可选值:
    • re.I(IGNORECASE):忽略大小写
    • re.M(MULTILINE):多行模式,改变^和$的行为
    • re.S(DOTALL):可以匹配任意字符,包括换行符
    • re.L(LOCALE):做本地化识别的匹配,表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境,不推荐使用
    • re.U(UNICODE):\w \W \s \S \d \D 的使用取决于unicode定义的字符属性,默认值
    • re.X(VERBOSE):冗长模式,该模式下字符串可以是多行的,忽略空白字符,并可以添加注释
obj = re.compile('\d+')  # 匹配一位或多位数字
ret = obj.search('ab123456')
print(ret.group())
123456
ret = re.search('\d+','ab123456')
print(ret.group())
123456

finditer(正则表达式,待匹配字符串):

  • 返回一个存放匹配结果的迭代器
  • 迭代器中的每一个匹配结果需要调用group()查看结果
ret = re.finditer('\d', 'ab2df4sf5')
print(ret)
print(next(ret).group())
<callable_iterator object at 0x0000029EBAAA1400>
2
ret = re.finditer('\d', 'ab2df4sf5')
for i in ret:
    print(i.group())
2
4
5
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值