python实现正则表达式匹配
题目描述
给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。
.
匹配任意单个字符
*
匹配零个或多个前面的那一个元素
所谓匹配,是要涵盖整个字符串 s的,而不是部分字符串。
LeetCode原题地址:https://leetcode-cn.com/problems/regular-expression-matching/
测试用例
- 示例 1
输入:s = “aa” p = “a”
输出:false
解释:“a” 无法匹配 “aa” 整个字符串。
- 示例 2
输入:s = “aa” p = “a*”
输出:true
解释:因为 ‘*’ 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 ‘a’。因此,字符串 “aa” 可被视为 ‘a’ 重复了一次。
- 示例 3
输入:s = “ab” p = “."
输出:true
解释:".” 表示可匹配零个或多个(’*’)任意字符(’.’)。
- 示例 4
输入:s = “aab” p = “cab”
输出:true
解释:因为 ‘*’ 表示零个或多个,这里 ‘c’ 为 0 个, ‘a’ 被重复一次。因此可以匹配字符串 “aab”。
- 示例 5
输入:s = “mississippi” p = “misisp*.”
输出:false
提示:
0 <= s.length <= 20
0 <= p.length <= 30
s 可能为空,且只包含从 a-z 的小写字母。
p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。
保证每次出现字符 * 时,前面都匹配到有效的字符
代码实现
将正则表达式匹配过程转换为动态规划问题
class Solution:def isMatch(self, s: str, p: str) -> bool:"""实现正则匹配符.*的功能(.表示任意字符,*表示匹配0到多次):param s:待匹配的字符串:param p:正则表达式:return:"""def match(i,j):if i == 0:return Falseif p[j-1] == ".":return Truereturn s[i-1] == p[j-1]m,n = len(s),len(p)#在初始化匹配list的时候,增加了一行一列#相当于在s和p的前面增加了一个空字符,简化后面的边界处理问题match_list = [[False]*(n+1) for _ in range(m+1)]#s和p的第一个字符匹配match_list[0][0] = Truefor i in range(m+1):for j in range(1,n+1):#这里是j-1主要是因为与p的字符长度进行匹配#因为前面为p增加了一个空字符if p[j-1] == "*":#当第j个字符为*时,分两种情况#第一种假设字符i和j-1不相等的情况下,我们就直接使用j-2的匹配结果match_list[i][j] |= match_list[i][j-2]#如果i和j-1相匹配,我们结合两个生成最终结果if match(i,j-1):match_list[i][j] |= match_list[i-1][j]else:#如果i和j相匹配,就使用i-1和j-1的匹配结果if match(i,j):match_list[i][j] |= match_list[i-1][j-1]return match_list[m][n]solution = Solution()
s = "aab"
p = "c*a*b"
print(solution.isMatch(s,p))
参考:
- LeetCode详细题解
python实现正则表达式匹配相关推荐
- python爬虫正则表达式匹配为空的问题
在用正则表达式匹配网址信息的时候,经常会匹配到空的列表.这个问题确实很烦,我当初也在这个地方卡了好长时间,所以就打算写一个博客来好好整理一下正则表达式匹配为空的一些状况. 一:选取正则表达式的方式不对 ...
- Python 使用正则表达式匹配URL网址
(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\') http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.& ...
- python正则匹配括号以及内容_【Python】正则表达式匹配最里层括号的内容
现在有一个字符串: str1 = '(subject_id = "A" OR (status_id = "Open" AND (status_id = &quo ...
- python编写正则表达式匹配单词_Python正则表达式匹配整个单词
守候你守候我 我认为,通过给出的答案,OP所期望的行为并没有完全实现.具体来说,布尔值的期望输出没有完成.给出的答案做帮助说明这一概念,我认为他们是优秀的.也许我可以说明我的意思,我认为OP使用了下面 ...
- 【python】正则表达式匹配多个模式
利用re包的正则表达式可以便捷地得到文本中的目标 在匹配多个模式的时候,可以使用或表达式和多行匹配方法来实现. #使用或表达式来实现 #patternA|patternB,模式A 或B两种匹配 imp ...
- Python用正则表达式匹配ABAC和AABB的词语
正则表达式前加r是为了不转义反斜杠后的字符,\3代表此处重复出现子模式3 from re import findall text = '''行尸走肉.金蝉脱壳.百里挑一.金玉满堂. 背水一战.霸王别姬 ...
- python中文正则表达式匹配
最近在写接口,遇到各种各样的问题,简单的自己默默解决了,就不贴出来分享了,遇到一个正则匹配汉字的,其实python语法跟其它的也差不多,好像通用的都是用unicode码来匹配,我的需求是在一个诸如&q ...
- Python之正则表达式匹配电话号码和邮箱
代码 #! python3 # phoneAndEmail.py - Finds phone numbers and email addresses on Clipboardimport pyperc ...
- python解析sql语句表名_python正则表达式匹配sql语句中的表名
[ string text = "select * from [admin] where aa=1 and cc='b' order by aa desc "; Regex reg ...
最新文章
- scipy.cluster.vq.kmeans的使用
- iOS 开发判断手机型号
- 安装64位Oracle 10g超详细教程
- 使用memcache的session入库
- 测试isEmpty null 方法
- Django框架(9.Django中的配置使用MySQL数据库以及页面重定向)
- iotop--补齐系统监视工具缺失的一环
- WPF Grid添加边框的两种方法
- PNG免扣+高清背景素材,帮电商美工\设计师快速出稿!
- PHP怎么使用ckeditor集成,php调用ckeditor?怎么调用ckeditor
- 微信小程序 网学习址
- 神经网络入门--学习资源
- Nginx+Tomcat web站(Linux) 动静站分离
- 遗传算法(Genetic Algorithm,GA)实例详解
- Java中使用native2ascii工具处理.properties文件
- Mtlab 二次规划及其例子
- 彻底杀除“logo1_.exe”(威金病毒)病毒
- POJ 3295.Tautology
- JAVA一些方法技巧
- 微信小程序【获取用户昵称头像和昵称(附源码)】