正则表达式匹配

技术分享第一时间送达!

NO.10 正则表达式匹配

原题:

给定一个字符串 () 和一个字符模式 ()。实现支持和的正则表达式匹配。

'.' 匹配任意单个字符。'*' 匹配零个或多个前面的元素。

匹配应该覆盖整个字符串 () ,而不是部分字符串。

说明:

可能为空,且只包含从的小写字母。

可能为空,且只包含从的小写字母,以及字符和。

示例 1:

输入:s = "aa"p = "a"

输出:false

解释:"a" 无法匹配 "aa" 整个字符串。

示例 2:

输入:s = "aa"p = "a*"

输出:true

解释:

'*' 代表可匹配零个或多个前面的元素,

即可以匹配 'a' 。

因此, 重复 'a' 一次, 字符串可变为 "aa"。

示例 3:

输入:s = "ab"p = ".*"

输出:true

解释:".*" 表示可匹配零个或多个('*')

任意字符('.')。

示例 4:

输入:

s = "aab"p = "c*a*b"

输出:true

解释:

'c' 可以不被重复,

'a' 可以被重复一次。因此可以匹配字符串 "aab"。

示例 5:

输入:

s = "mississippi"p = "mis*is*p*."

输出:false

看到题目是蒙逼的,自己正则表达式学的很渣(从未认真学习过)因为之前学习和开发很少用到,出来混总是要还的,所以先恶补了一波正则,然后再刷题。

一、简介

正则表达式本身是一种小型的、高度专业化的编程语言,而在python中,通过内嵌集成re模块,程序猿可以直接调用来实现正则匹配。

二、正则表达式中常用的字符含义

注:

反斜杠后边跟元字符去除特殊功能;(即将特殊字符转义成普通字符)

反斜杠后边跟普通字符实现特殊功能;(即预定义字符)

引用序号对应的字组所匹配的字符串。

三、re模块中常用功能函数

match()

匹配string 开头,成功返回Match object, 失败返回None,只匹配一个。

search()

在string中进行搜索,成功返回Match object, 失败返回None, 只匹配一个。

findall()

在string中查找所有 匹配成功的组, 即用括号括起来的部分。返回list对象,每个list item是由每个匹配的所有组组成的list。

finditer()

在string中查找所有 匹配成功的字符串, 返回iterator,每个item是一个Match object。

group()

是将所有匹配符合条件的字符串,打包成一个组,即group。其中编号为0的group,即group(0)表示匹配的整个字符串。其他编号分别为1,2,3,…的表示匹配成功返回的组中的每个字符串。

split()

按照能够匹配的子串将string分割后返回列表。

可以使用re.split来分割字符串,如:re.split(r'\s+', text);将字符串按空格分割成一个单词列表。

注:re.match与re.search与re.findall的区别

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

(菜鸟教程正则表达式传送门)

http://www.runoob.com/python3/python3-reg-expressions.html

解题:

importre

classSolution(object):

defisMatch(self,s,p):

ans = (re.match(p,s))

if(ans ==None):

return False

if(ans.group() != s):

return False

return True

s = Solution()

print(s.isMatch("ab",".*c"))

这个题可以不用re模块,但是以自己现在的知识储备没有任何思路,LeetCode刷题已经到了第10题了,这算是前十题里面最难的了。

欢迎您的点赞和分享

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181015G21CJU00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券