美文网首页
python中re库的常见用法

python中re库的常见用法

作者: _icey_ | 来源:发表于2021-07-07 18:37 被阅读0次

一、常用符号

. 匹配除换行符外的任意字符
\d 匹配数字
\D 匹配非数字
\w 匹配数字字母下划线,支持中文
\W 小写w的反集

[abc] 匹配abc中任意一个
[a-f] 匹配字母a到f中的任意一个
x|y 匹配x或者y
^ 匹配字符串的开头
$ 匹配字符串的结尾

{3,5} 匹配次数,最少3个,最多5个
{3,} 至少匹配3次
* 匹配前一个字符,0次或多次
+ 匹配前一个字符,1次或多次

? 当前面不是数量表达式时,代表匹配0次或1次

  • 贪婪模式:尽可能匹配最多的,实在匹配不了最多的了,再匹配较少的。默认贪婪模式
  • 非贪婪模式:尽可能匹配最少的,当前面的表达式是数量表达式时,可以使用?改为非贪婪模式

举个栗子:
findall()函数的作用是匹配所有符合条件字符串,并以列表形式返回

import re
s = 'a12a343eresfasfe s%^&$#$__..adfsd'
res = re.findall('a.{3,5}',s)
print(res)
贪婪模式(不加问号)的返回结果

由于.是匹配除换行符外的所有字符,{3,5} 匹配次数,最少3个,最多5个,在默认的贪婪模式下会匹配最多的字符,所以在列表中,字母a开头的字符串后面都跟了5个字符。

import re
s = 'a12a343eresfasfe s%^&$#$__..adfsd'

res = re.findall('a.{3,5}?',s)
print(res)
非贪婪模式(加问号)的返回结果

可以看到在非贪婪模式下,列表中的每一项都匹配最少的字符数。

最常用的表达式 .*?

import re
s = 'a12a343eresfasfe s%^&$#$__..adfsd'
res = re.findall('a.*?s',s)
print(res)
运行结果

从前往后,匹配到符合条件的最短的每一个字符串

边界字符:
^ 限定开头
$ 限定结尾

匹配分组:
() 提取出来的只有括号里匹配到的部分

二、re库中的常用方法

1、re.findall(pattern, string, flags=0)

上文中已经用到这个方法了,返回匹配到的字符串列表,如果没有匹配到的内容,则返回空列表。

flags参数是可以省略的,不省略时代表具有其他特殊的功能,如忽略大小写,忽略换行符等,re.S代表匹配时忽略换行符

忽略换行符的例子

2、re.search(pattern, string, flags=0)

re.search()和re.findall()的参数是一样的,只是返回结果不同,如果匹配到了,就返回该结果的正则表达式对象;如果没有匹配到,则返回None

使用re.search()返回匹配到的第一个字符串的正则表达式对象,找到了就会停止匹配。因此这个函数比较适合在一个大文本中找第一个出现的字符串。

若想让这个字符串展示出来,还需要借助group()函数。

  • group(0)代表读取所有匹配到的数据
  • group(1)代表读取第一个括号里的内容
  • group(n)代表读取第n个括号里的内容,n表示正整数

举个栗子:

import re
s = 'abcdefg'

res = re.search('a(.*?)d(\w)',s,re.S)

print(res)  # re.search()函数返回匹配到的正则表达式对象
print(res.group(0))  # re.search().group(0)返回匹配到所有字符串,如果表达式中没有括号可以直接用0
print(res.group(1))  # re.search().group(1)返回正则表达式第一个括号里匹配到的内容
print(res.group(2))  # re.search().group(1)返回正则表达式第二个括号里匹配到的内容
运行结果

3、re.compile(pattern, flags=0)

这个函数的作用是将正则表达式编译为一个正则表达式对象,如果要多次使用这个正则表达式的话,可以先编译,然后复用,使程序更高效一些,对这个对象继续使用.match(string)就可以显示匹配到的正则表达式对象,后续如果想要获取具体内容的话,和上面是一眼国的,直接使用group(0)就可以啦。

4、re.mach(pattern, string)

如果不考虑复用的话,和re.mach(pattern, string)的效果是一样的。

import re
s = 'cabcdefg'

res = re.match('a(.*?)d(\w)',s)  # 等价于 re.compile('a(.*?)d(\w)').match(s)

print(res)  
运行结果

从运行结果也可以看出,re.match()和re.search()的区别,虽然二者都会返回匹配到的正则表达式对象,但是re.match()是从字符串的最开始位置开始匹配的,如果最开始的字符不匹配则会直接返回None;而re.search()则会一直往后找,直到找到第一个符合条件的字符串。

5、re.sub(pattern, repl, string, count=0, flags=0)

re.sub()函数用于替换字符串中的匹配项

  • pattern : 正则中的模式字符串。
  • repl : 替换的字符串,也可为一个函数。
  • string : 要被查找替换的原始字符串。
  • count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。

举个栗子:

import re
s = 'cabcdefg12343adsads35435sadd'

res = re.sub('\d+',' ',s)

print(res)
运行结果

将所有数字替换为了一个空格。

相关文章

  • python中re库的常见用法

    一、常用符号 . 匹配除换行符外的任意字符\d 匹配数字\D 匹配非数字\w 匹配数字字母下划线,支持中文\W ...

  • python --正则表达式-re模块

    所有关于正则表达式的操作都使用 python 标准库中的 re 模块。 Python中的re模块 re.compi...

  • Python利用Requests库写爬虫(二)

    学会了Request库的基本用法,接下来我想利用Requests来抓取火车票数据。 基本用法:Python利用Re...

  • python正则表达式详解

    #首先,python中的正则表达式大致分为以下几部分: 元字符 模式 函数 re 内置对象用法 分组用法 环视用法...

  • Re库的用法

    Python自1.5版本起增加了re模块,它提供了Perl风格(Perl Regular Expression 又...

  • [Ubuntu] pydub配置及常见用法

    0. pydub 简介 基于ffmpeg或libav处理音频的python库 1.环境配置 2.常见用法 2.1 ...

  • 正则表达式

    非Python独有 re库提供 用法讲解: 模式描述 \w匹配字母数字及下划线 \W匹配非字母数字下划线 \s...

  • 正则表达式

    Python中的正则表达式可以用re模块访问,re模块是标准库的一部分。 re.match() ,re.searc...

  • Re库的基本使用

    Re库介绍: Re库是Python的标准库,主要用于字符串匹配。调用方式:import re 正则表达式的表示类型...

  • Re库的介绍

    Re库又称为正则表达式库,是Python的标准库,主要用于字符串的匹配 调用方法 Re库的基本使用 Re库使用ra...

网友评论

      本文标题:python中re库的常见用法

      本文链接:https://www.haomeiwen.com/subject/wpgoultx.html