前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python之re模块

Python之re模块

作者头像
新人小试
发布2018-04-12 11:06:10
1K0
发布2018-04-12 11:06:10
举报
文章被收录于专栏:代码世界代码世界

re模块

在Python中想要使用正则表达式,就需要调用re模块来实现。

在 re 模块下的常用方法:

调用时程序最上面需要写

代码语言:javascript
复制
import re

常用的几个关键字: findall  :re.findall遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表。

格式:re.findall(‘前面放要查找的内容’,‘这里放被查找的内容’)

search :re.search函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果字符串没有匹配,则返回None。

                 返回的变量需要调用group才能拿到结果 #,如果没有找到,那么返回None,调用group会报错。

格式:re.search(‘前面放要查找的内容’,‘这里放被查找的内容’) 

match :决定RE是否在字符串刚开始的位置匹配。//注:这个方法并不是完全匹配。当pattern结束时若string还有剩余字符,仍然视为成功。

想要完全匹配,可以在表达式末尾加上边界匹配符'$'。

match是从头开始匹配,如果正则规则从头开始可以匹配上,就返回一个变量。  匹配的内容需要用group才能显示 。 如果没匹配上,就返回None,调用group会报错。

格式: re.match(‘前面放要查找的内容’,‘这里放被查找的内容’)

compile : 只会从开头匹配,如果不是开头的字符串,那么将不会匹配成功。将正则表达式编译成为一个 正则表达式对象。

格式:re.compile

search  :  re.search函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果字符串没有匹配,则返回None。

格式:re.search(pattern, string, flags=0)

*注:match和search一旦匹配成功,就是一个match object对象,而match object对象有以下方法:

  • group() 返回被 RE 匹配的字符串
  • start() 返回匹配开始的位置
  • end() 返回匹配结束的位置
  • span() 返回一个元组包含匹配 (开始,结束) 的位置
  • group() 返回re整体匹配的字符串,可以一次输入多个组号,对应组号匹配的字符串。

a. group()返回re整体匹配的字符串, b. group (n,m) 返回组号为n,m所匹配的字符串,如果组号不存在,则返回indexError异常 c.groups()groups() 方法返回一个包含正则表达式中所有小组字符串的元组,从 1 到所含的小组号,通常groups()不需要参数,返回一个元组,元组中的元就是正则表达式中定义的组。 

finditer:搜索string,返回一个顺序访问每一个匹配结果(Match对象)的迭代器。找到 RE 匹配的所有子串,并把它们作为一个迭代器返回。

格式  :  re.finditer(pattern, string, flags=0)

split :按照能够匹配的子串将string分割后返回列表。可以使用re.split来分割字符串,如:re.split(r'\s+', text);将字符串按空格分割成一个单词列表。

格式:re.split(pattern, string[, maxsplit])

sub : 使用re替换string中每一个匹配的子串后返回替换后的字符串。

re.sub还允许使用函数对匹配项的替换进行复杂的处理。

如:re.sub(r'\s', lambda m: '[' + m.group(0) + ']', text, 0);将字符串中的空格' '替换为'[ ]'。

格式:re.sub(pattern, repl, string, count)

 subn:返回替换次数。

格式:re.subn(pattern, repl, string, count=0, flags=0)

一些注意点:

1、re.match与re.search与re.findall的区别:

re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

代码语言:javascript
复制
a=re.search('[\d]',"abc33").group()
print(a)
p=re.match('[\d]',"abc33")
print(p)
b=re.findall('[\d]',"abc33")
print(b)
执行结果:
None
['3', '3']

2、贪婪匹配与非贪婪匹配

*?,+?,??,{m,n}?    前面的*,+,?等都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配

代码语言:javascript
复制
a = re.findall(r"a(\d+?)",'a23b')
print(a)
b = re.findall(r"a(\d+)",'a23b')
print(b)
执行结果:
['2']
['23']

a = re.match('<(.*)>','<H1>title<H1>').group()
print(a)
b = re.match('<(.*?)>','<H1>title<H1>').group()
print(b)
执行结果:
<H1>title<H1>
<H1>
代码语言:javascript
复制
a = re.findall(r"a(\d+)b",'a3333b')
print(a)
b = re.findall(r"a(\d+?)b",'a3333b')
print(b)
执行结果如下:
['3333']
['3333']
#######################
这里需要注意的是如果前后均有限定条件的时候,就不存在什么贪婪模式了,非匹配模式失效。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-01-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • re模块
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档