手机版

python模块re正则表达式详解

时间:2021-09-06 来源:互联网 编辑:宝哥软件园 浏览:

一、简介

正则表达式是一种小型的、高度专门化的编程语言,并不是python独有的,而是许多编程语言的基础和重要部分。在python中,主要通过re模块来实现。

正则表达式模式被编译成一系列字节码,然后由用c语言编写的匹配引擎执行,那么正则表达式通常有哪些使用场景呢?

例如,为要匹配的相应字符串集指定规则;

字符串集可以包括电子邮件地址、互联网地址、电话号码或根据要求定制的一些字符串集。

当然,我们也可以判断一个字符串集是否满足我们定义的匹配规则;

查找字符串中与规则匹配的部分;

修改、剪切等一系列文本处理;

.

第二,特殊符号和字符(元字符)

本文介绍了一些常见的元字符,它们赋予正则表达式强大的功能和灵活性。表2-1列出了更常见的符号和字符。

第三,正则表达式

1.使用compile()函数编译正则表达式

因为python代码最终会被翻译成字节码,然后在解释器上执行。因此,预编译一些我们代码中经常使用的正则表达式会更方便。

re模块中的大多数函数与已编译的正则表达式对象和正则匹配对象的方法具有相同的名称和功能。

示例:

Import re r1=r'bugs' #前面带' r '反斜杠的字符串不会以任何特殊的方式处理,这是一种习惯,虽然re.findall(r1,Bugsbunny') #解释性匹配用re模块直接['bugs'] r2=re.compile(r1) #如果r1是匹配规则,你会经常使用它。为了提高效率,那么就在0x7f5d7db99bb0r2.findall('兔八哥')处预编译r2 #编译后的正则对象_ sre . sre _ pattern nobject #通过findall方法访问对象得到的匹配结果与上面的['bugs'] #是一致的,所以re模块中的大部分函数与已编译的正则表达式对象和正则匹配对象的方法具有相同的名称和功能。re.compile()函数还接受可选的标志参数,这些参数通常用于实现不同的特殊函数和语法更改。这些标志也可以用作大多数re模块功能的参数。这些标志可以与操作方法(|)结合使用。

示例:

导入rer1=r' bugs' R2=re。编译(R1,re。I) #这里选择了忽略大小写的符号,完整的是re.IGNORECASE,这里是缩写re.ir2.findall('兔八哥')['bugs'] brbr # re.s makes。匹配所有字符,包括换行符br# re。m多线匹配,hero和$br# re,X用于使规则匹配模式组织得更加清晰和完整。旗帜参数的列表和用法请参考相关官方文件。

2.使用正则表达式

Re模块提供了正则表达式引擎的接口。下面是一些常用的函数和方法。

匹配对象和group()和group()方法

在处理正则表达式时,除了正则表达式对象之外,还有另一种对象类型:匹配对象。这些是通过成功调用match()或search()返回的对象。有两种主要的方法来匹配对象:group()和group()。

Group()根据需要返回整个匹配对象或特定的子组。Groups()只返回一个包含唯一或所有子组的元组。如果没有子组要求,那么当group()仍然返回整个匹配时,groups返回一个空元组。下面的函数示例演示了这种方法。

使用Match()方法匹配字符串

match()函数匹配字符串开头的模式。如果匹配成功,则返回匹配对象;如果匹配失败,则返回无,匹配对象的方法组()方法可用于显示成功的匹配。

例子如下:

M=re。match(‘bugs’,‘兔八哥’)#如果m不是None:则模式匹配字符串#如果匹配成功,则输出匹配内容.m.group().0x7f5d7da1f168 #处的bugs ' br MBR _ sre.sre _ match对象确认返回的匹配对象使用了搜索

Search()的工作原理与match()完全相同,只是search()是给定正则表达式模式的第一个匹配项。简单地说,匹配可以在任何位置成功,而不仅仅是字符串的开头,这是与match()函数的区别。用脚趾头想想,search()方法的应用范围更广。

示例:

M=re.search ('bugs ','你好兔八哥')如果m不是none :m.group().bug '使用findall()和finditer()来查找每次出现的位置

Findall()用于查找字符串中的所有(非重复的)正则表达式模式,并返回匹配列表。finditer()和findall()的区别在于它返回一个迭代器。对于每个匹配,迭代器返回一个匹配的对象。

m=re.findall('bugs ',' bugsbunnybugs') m['bugs ',' bugs'] m=re.finditer('bugs ',Bugsbunnybugs ')m . next()# iterator返回一个具有next()方法_ sre的匹配对象。使用group()方法显示sre _ match objectat0x7f 5d 7 da 71 a58 #匹配。m.next()。group()“bugs”搜索并用sub()和subn()替换

匹配正则表达式的字符串的所有部分都以某种形式被替换。Sub()返回一个用于替换的字符串,可以定义替换的次数,默认替换所有位置。Subn()与sub()相同,但是subn()也总是返回一个替换,并且被替换的字符串作为包含两个元素以及替换总数的元组返回。

示例:

R=' a.b' m=' ACB ABC AAB AAC' re。sub (r,' hello ',m)'你好ABC你好AAC' br re。subn (r,' hello ',m) br ('hello ABC hello AAC ',2) string也有replace()方法,当一些

使用split()来拆分字符串

同样,字符串中也有split(),但不能处理正则表达式匹配的分段。在re模块中,正则表达式的模式分隔符被分离,split函数将字符串分成一个列表,然后返回成功匹配的列表。

示例:

S=' 1 2-3 * 4' re。拆分(r' [\ \-\ *]',s) ['1 ',' 2 ',' 3 ',' 4']分组

有时候匹配的时候,我们只是想提取一些想要的信息或者对提取的信息进行分类。这时,我们需要对规则匹配模式进行分组,只需添加()。

示例:

M=re。match ('(\ w {3})-(\ d {3})'、' ABC-123') m.group () #完全匹配' abc-123' m.group(1) #子组1' ABC' m.group (2)您可以使用group()方法获取包含所有匹配字符串的元组。

以上是边肖介绍的python模块re正则表达式的详细说明,希望对大家有所帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!

版权声明:python模块re正则表达式详解是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。