Python常用的正则表达式处理函数详解

 更新时间:2020年03月07日 11:23:17   作者:圈er  
这篇文章主要介绍了Python常用的正则表达式处理函数,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

正则表达式是一个特殊的字符序列,用于简洁表达一组字符串特征,检查一个字符串是否与某种模式匹配,使用起来十分方便。

在Python中,我们通过调用re库来使用re模块:

import re

正则表达式语法模式和操作符详见:https://www.runoob.com/python/python-reg-expressions.html#flags

下面介绍Python常用的正则表达式处理函数。

re.match函数

re.match 函数从字符串的起始位置匹配正则表达式,返回match对象,如果不是起始位置匹配成功的话,match()就返回None。

re.match(pattern, string, flags=0)

pattern:匹配的正则表达式。

string:待匹配的字符串。

flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。具体参数为:

re.I:忽略大小写。

re.L:表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境。

re.M:多行模式。

re.S:即 . ,并且包括换行符在内的任意字符(. 不包括换行符)。

re.U:表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库。

re.X:为了增加可读性,忽略空格和 # 后面的注释。

import re
#从起始位置匹配
r1=re.match('abc','abcdefghi')
print(r1)
#不从起始位置匹配
r2=re.match('def','abcdefghi')
print(r2)

运行结果:

其中,span表示匹配成功的整个子串的索引。

使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

group(num):匹配的整个表达式的字符串,group() 可以一次输入多个组号,这时它将返回一个包含那些组所对应值的元组。

groups():返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。

import re

s='This is a demo'
r1=re.match(r'(.*) is (.*)',s)
r2=re.match(r'(.*) is (.*?)',s)

print(r1.group())
print(r1.group(1))
print(r1.group(2))
print(r1.groups())
print()
print(r2.group())
print(r2.group(1))
print(r2.group(2))
print(r2.groups())

运行结果:

上述代码中的(.*)和(.*?)表示正则表达式的贪婪匹配与非贪婪匹配,详情见此:https://www.jb51.net/article/31491.htm

re.search函数

re.search函数扫描整个字符串并返回第一个成功的匹配,如果匹配成功则返回match对象,否则返回None。

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

pattern:匹配的正则表达式。

string:待匹配的字符串。

flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

import re
#从起始位置匹配
r1=re.search('abc','abcdefghi')
print(r1)
#不从起始位置匹配
r2=re.search('def','abcdefghi')
print(r2)

运行结果:

使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

group(num=0):匹配的整个表达式的字符串,group() 可以一次输入多个组号,这时它将返回一个包含那些组所对应值的元组。

groups():返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。

import re

s='This is a demo'
r1=re.search(r'(.*) is (.*)',s)
r2=re.search(r'(.*) is (.*?)',s)

print(r1.group())
print(r1.group(1))
print(r1.group(2))
print(r1.groups())
print()
print(r2.group())
print(r2.group(1))
print(r2.group(2))
print(r2.groups())

运行结果:


从上面不难发现re.match与re.search的区别:re.match只匹配字符串的起始位置,只要起始位置不符合正则表达式就匹配失败,而re.search是匹配整个字符串,直到找到一个匹配为止。

re.compile 函数

compile 函数用于编译正则表达式,生成一个正则表达式对象,供 match() 和 search() 这两个函数使用。

re.compile(pattern[, flags])

pattern:一个字符串形式的正则表达式。

flags:可选,表示匹配模式,比如忽略大小写,多行模式等。

import re
#匹配数字
r=re.compile(r'\d+') 
r1=r.match('This is a demo')
r2=r.match('This is 111 and That is 222',0,27)
r3=r.match('This is 111 and That is 222',8,27)
 
print(r1)
print(r2)
print(r3)

运行结果:

findall函数

搜索字符串,以列表形式返回正则表达式匹配的所有子串,如果没有找到匹配的,则返回空列表。

需要注意的是,match 和 search 是匹配一次,而findall 匹配所有。

findall(string[, pos[, endpos]])

string:待匹配的字符串。

pos:可选参数,指定字符串的起始位置,默认为0。

endpos:可选参数,指定字符串的结束位置,默认为字符串的长度。

import re
#匹配数字
r=re.compile(r'\d+') 
r1=r.findall('This is a demo')
r2=r.findall('This is 111 and That is 222',0,11)
r3=r.findall('This is 111 and That is 222',0,27)
 
print(r1)
print(r2)
print(r3)

运行结果:

re.finditer函数

和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。

re.finditer(pattern, string, flags=0)

pattern:匹配的正则表达式。

string:待匹配的字符串。

flags:标志位,用于控制正则表达式的匹配方式,如是否区分大小写,多行匹配等。

import re 

r=re.finditer(r'\d+','This is 111 and That is 222')
for i in r: 
 print (i.group())

运行结果:

re.split函数

将一个字符串按照正则表达式匹配的子串进行分割后,以列表形式返回。

re.split(pattern, string[, maxsplit=0, flags=0])

pattern:匹配的正则表达式。

string:待匹配的字符串。

maxsplit:分割次数,maxsplit=1分割一次,默认为0,不限次数。

flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等。

import re 

r1=re.split('\W+','This is 111 and That is 222') 
r2=re.split('\W+','This is 111 and That is 222',maxsplit=1) 
r3=re.split('\d+','This is 111 and That is 222') 
r4=re.split('\d+','This is 111 and That is 222',maxsplit=1) 
print(r1)
print(r2)
print(r3)
print(r4)

运行结果:

re.sub函数

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

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

pattern:正则中的模式字符串。

repl:替换的字符串,也可为一个函数。

string:要被查找替换的原始字符串。

count:模式匹配后替换的最大次数,默认0表示替换所有的匹配。

import re 

r='This is 111 and That is 222'
# 删除字符串中的数字
r1=re.sub(r'\d+','',r)
print(r1)
# 删除非数字的字符串 
r2=re.sub(r'\D','',r)
print(r2)

运行结果:

参考资料:

https://www.runoob.com/python/python-reg-expressions.html#flags

到此这篇关于Python常用的正则表达式处理函数详解的文章就介绍到这了,更多相关python 正则表达式处理函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 日常收集JS邮箱验证正则表达式

    日常收集JS邮箱验证正则表达式

    本篇文章是小编日常整理些有关js邮箱验证正则表达式,内容比较经典,特此把内容分享到脚本之家网站供大家借鉴
    2015-10-10
  • 正则表达式[\s\S]*与[\w\W]* 什么意思

    正则表达式[\s\S]*与[\w\W]* 什么意思

    很多人咨询[\s\S]*与[\w\W]* 什么意思,不是有.了吗,那么它们的组合,表示所有的都匹配,与它相对应的,有[\w\W]等,意义完全相同,需要的朋友可以参考下
    2020-03-03
  • 详解Python3中的正则表达式的基本用法

    详解Python3中的正则表达式的基本用法

    本文重点给大家介绍正则表达式的相关用法,正则表达式是处理字符串的强大的工具,它有自己特定的语法结构,有了它,实现字符串的检索、替换、匹配验证都不在话下
    2019-07-07
  • 在VS2008中使用正则表达式进行查找和替换

    在VS2008中使用正则表达式进行查找和替换

    正则表达式是查找和替换文本模式的一种简洁而灵活的表示法。 在“查找和替换”窗口中执行“快速查找”、“在文件中查找”、“快速替换”或“在文件中替换”操作时,可以在该窗口的“查找内容”和“替换为”字段中使用一组专用的正则表达式
    2016-05-05
  • re模块的正则匹配的表达式详解

    re模块的正则匹配的表达式详解

    这篇文章主要介绍了使用的re模块的正则匹配的表达式,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • EditPlus 正则表达式替换字符串详解

    EditPlus 正则表达式替换字符串详解

    正则表达式是一个查询的字符串,它包含一般的字符和一些特殊的字符,特殊字符可以扩展查找字符串的能力,正则表达式在查找和替换字符串的作用不可忽视,它能很好提高工作效率。
    2009-08-08
  • 常用正则表达式知识点解读及判读有效数字、手机号邮箱正则表达式

    常用正则表达式知识点解读及判读有效数字、手机号邮箱正则表达式

    正则表达式式应用非常广泛,本文给大家收集整理些正则表达式知识点解读及判断有效数字、手机号邮箱正则表达式,对常用正则表达式相关知识感兴趣的朋友一起学习吧
    2015-11-11
  • 正则表达式简介及在C++11中的简单使用教程

    正则表达式简介及在C++11中的简单使用教程

    正则表达式(regular expression)是计算机科学中的一个概念,又称规则表达式,通常简写为regex、regexp、RE、regexps、regexes、regexen。接下来通过本文给大家介绍正则表达式简介及在C++11中的简单使用教程,一起通过本文学习吧
    2017-02-02
  • linux下如何配置SQLSERVER ODBC

    linux下如何配置SQLSERVER ODBC

    这篇文章主要介绍了linux下如何配置SQLSERVER ODBC的相关资料,需要的朋友可以参考下
    2015-09-09
  • 正则表达式30分钟入门教程 v2.1版

    正则表达式30分钟入门教程 v2.1版

    正则表达式30分钟入门教程 v2.1版...
    2007-03-03

最新评论