python正则表达式匹配字符串相关方法

python正则表达式匹配字符串相关方法python 正则表达式匹配字符串相关方法一 python 正则表达式相关函数简要介绍 re compile 函数 re match 函数 re search 函数 findall 函数 re finditer 函数其他函数二 python 正则表达式匹配方法简要介绍一 python 正则表达式相关函数简要介绍 re compile 函数 re compile 函数用于编译正则表达式 生成一个正则表达式 Pattern 对象 供 match search 和 findall 这三个函数使用 re compile

一、匹配方法简要介绍及注意事项

1.贪婪匹配与非贪婪匹配

在定义用于匹配的模式串时,我们知道“.*”和“.*?”分别代表“匹配任意字符0次或多次”和“匹配任意字符0次或1次”。如果使用“.*”,则为贪婪匹配;如果使用“.*?”,则为非贪婪匹配。

# 以abcdbcd为例 str_demo = 'abcdbcd' result = re.search('b.*d', str_demo).group() print(result) 输出bcdbcd result = re.search('b.*?d', str_demo).group() print(result) 输出bcd 

2.findall与search的选取问题

如果认为自己定义的模式串只能匹配到一个结果,则使用search方法结合group方法可以直接得到这个字符串;如果认为自己定义的模式串能匹配到多个结果,则使用findall方法可以得到存储多个结果字符串的列表。

# 以abcdbcd为例 str_demo = 'abcdbcd' result = re.search('b.*d', str_demo).group() print(result) 输出bcdbcd result = re.findall('b.*?d', str_demo) print(result) 输出['bcd', 'bcd'] 

3.匹配时”()”和“[]”的用法

str_demo = 'eabceaebece' result = re.findall('[abc]', str_demo) print(result) 结果为['a', 'b', 'c', 'a', 'b', 'c'] result = re.findall('[abc][e]', str_demo) print(result) 结果为['ce', 'ae', 'be', 'ce'] result = re.findall('[abc].*?[e]', str_demo) print(result) 结果为['abce', 'ae', 'be', 'ce'] result = re.findall('[abc].*[e]', str_demo) print(result) 结果为['abceaebece'] 

2.(…)会匹配在()内的整个字符串。使用search方法时则正常匹配(相当于没有()),使用findall方法时则只会匹配(…)的内容。

str_demo = 'eabcdeeaebece' result = re.search('(abc).*?(e)', str_demo).group() print(result) 结果为abcde result = re.search('(abc).*(e)', str_demo).group() print(result) 结果为abcdeeaebece result = re.findall('(bc).*(e)', str_demo) print(result) 结果为[('bc', 'e')] 

3.()[]同时出现,考虑(…)式的字符串与[…]式内的字符和顺序,使用findall 方法时结果会舍弃[…]内容,使用search方法时则正常匹配(相当于没有()和[])。

str_demo = 'eabcdeeaebece' result = re.findall('(e)[abc]', str_demo) print(result) 结果为['e', 'e', 'e', 'e'] result = re.findall('(abc)[e]', str_demo) print(result) 结果为[] result = re.findall('(abc).*[e]', str_demo) print(result) 结果为['abc'] result = re.findall('[abc].*(e)', str_demo) print(result) 结果为['e'] result = re.search('[bc].*(e)', str_demo).group() print(result) 结果为 结果为bcdeeaebece result = re.search('[bc].*?(e)', str_demo).group() print(result) 结果为 结果为bcde 

4.使用正则表达式匹配字符串的例子

下列例子均使用非贪婪匹配方法。

(1)匹配以a开头,以b为结尾的字符串(不包含开头和结尾):

str_demo = 'acdbcd' pattern = re.compile('(?<=a).*?(?=b)') result = pattern.search(str_demo).group() print(result) 输出cd 

(2)匹配以a开头,以b结尾的字符串(包含开头和结尾):

str_demo = 'acdbcd' pattern = re.compile('a.*?b') result = pattern.search(str_demo).group() print(result) 输出acdb 

(3)匹配前面不为a、后面不为b的字串:

str_demo = 'a1*3*3b' pattern = re.compile('(?! 
    
    ) result 
    = pattern 
    . 
    search 
    (str_demo 
    ) 
    . 
    group 
    ( 
    ) 
    print 
    (result 
    ) 输出 
    1 
     
    * 
    3 
   

二、相关函数简要介绍

re.compile函数

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

re.compile(pattern[, flags]) 
参数 描述
pattern 匹配的正则表达式。
flags 可选参数,标志位,控制匹配方式,如:是否区分大小写,多行匹配等等。

re.match函数

re.match 尝试从目标字符串的起始位置匹配,如果起始位置匹配不成功,则match()就返回none。

re.match(pattern, string, flags=0) 
参数 描述
pattern 匹配的正则表达式。
string 要匹配的字符串。
flags 可选参数,标志位,控制匹配方式,如:是否区分大小写,多行匹配等等。

re.search函数

re.search 扫描整个字符串并返回第一个成功的匹配。

re.search(pattern, string, flags=0) 
参数 描述
pattern 匹配的正则表达式。
string 要匹配的字符串。
flags 可选参数,标志位,控制匹配方式,如:是否区分大小写,多行匹配等等。

findall函数

findall 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。

findall(string[, pos[, endpos]]) pattern.findall(string[, pos[, endpos]]) # pattern及定义好的正则匹配式,如re.compile re.findall(pattern,string[, pos[, endpos]]) 
参数 描述
string 要匹配的字符串。
pos 可选参数,指定字符串的起始位置,默认为 0。
endpos 可选参数,指定字符串的结束位置,默认为字符串的长度。

re.finditer函数

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

re.finditer(pattern, string, flags=0) 
参数 描述
pattern 匹配的正则表达式。
string 要匹配的字符串。
flags 可选参数,标志位,控制匹配方式,如:是否区分大小写,多行匹配等等。

re.sub函数

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

re.sub(pattern, repl, string, count=0, flags=0) 
参数 描述
pattern 匹配的正则表达式
repl 替换用的字符串,也可为一个函数。
string 要匹配的字符串。
count 可选参数,匹配后替换的最大次数,默认 0 表示替换所有的匹配。
flags 可选参数,标志位,控制匹配方式,如:是否区分大小写,多行匹配等等。

其他函数

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223618.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午1:47
下一篇 2026年3月17日 下午1:48


相关推荐

  • MySQL导入Excel数据

    转载来自:https://www.cnblogs.com/yuwensong/p/4026332.html好了,现在我来介绍一下如何利用phpMyAdmin批量导入Excel内容到MySQL。首先你要知道phpMyAdmin是什么(不知道的这篇文章可以跳过了),我今天用的版本是phpMyAdmin3.2.4,MySQL的版本是5.1.41。1、第一步我们得到了一个excel表,里面有很多需…

    2022年4月5日
    50
  • structs2总结

    structs2总结一 Structs2 的 helloworld1 加入 Struts2 所依赖 jar 包到 tomcat 容器 webapps 下面项目目录下面的 WEB INF lib 2 web xml 配置我们的核心控制器 StrutsPrepar 新建一个 Action 类 处理业务逻辑 4 在 classpath 下新建 struts xml 文件 注册 Action 类 5 访问 ac

    2026年3月18日
    2
  • Spring AOP中动态代理的两种实现方式及其过程_ajax的原理和作用

    Spring AOP中动态代理的两种实现方式及其过程_ajax的原理和作用AOP思想:基于代理思想,对原来目标对象,创建代理对象,在不修改原对象代码情况下,通过代理对象,调用增强功能的代码,从而对原有业务方法进行增强!

    2022年8月11日
    7
  • 微信火柴人html5小游戏,20个好玩的微信小游戏推荐!你玩过几个?「建议收藏」

    50000+游戏爱好者已加入我们!每天推荐好玩游戏!加入我们,沐沐带你发现好游戏!只有你想不到,没有我找不到的好游戏!「良心好游戏推荐」搜罗了好玩的微信小游戏大全,模拟经营游戏、恐怖游戏、消除游戏、休闲游戏、益智游戏、吃鸡游戏、烧脑游戏、解谜游戏大全、换装游戏、射击游戏、吃鸡小游戏、像素游戏一个都不少!还有游戏攻略哦!每天都会推荐好玩的小游戏。————————————————————————不知不…

    2022年4月11日
    96
  • aiohttp进阶教程

    aiohttp进阶教程在 python 后台 asyncio aiohttp 入门教程 多进程 asyncio 文章中 我们介绍了 asyncio aiohttp 的入门知识 现在我们这里详细介绍一下 aiohttp 参考文档 https www bookstack cn read aiohttp chinese documentatio aiohttp 文档 ServerTutori mdaiohttp web 建立在这

    2026年3月18日
    2
  • 小白都能看懂的 openclaw 安装教程!

    小白都能看懂的 openclaw 安装教程!

    2026年3月13日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号