题目描述
请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配
# -*- coding:utf-8 -*-
class Solution:
def match(self, s, pattern):
if not s and not pattern:
return True
if s and not pattern: # pattern为空就这2种情况
return False
if len(pattern) > 0 and pattern[1] == '*':
# 让len(s) > 0在and 前面先判断,否则s[0]在前会越界
if len(s) > 0 and (s[0] == pattern[0] or pattern == '.'): # s不为空时,,分s不为空和s为空两种情况是为了防止s[i]非法越界
# 匹配一个 or 匹配多个 or 忽略'*' 例:在s = 'ba' pattern = '.*a' 时,在'b'和'.*'匹配后要把'.*'忽略,让'a'和'a'匹配,否则出错
return self.match(s[1:], pattern[2:]) or self.match(s[1:], pattern) or self.match(s, pattern[2:])
else: # 当 '*' 匹配0个字符时, 即s为空时
return self.match(s, pattern[2:])
else: # pattern[1] != '*'时
if len(s) > 0 and (s[0] == pattern[0] or pattern == '.'):
return self.match(s[1:], pattern[1:])
else: # 不匹配
return False
方法二:
# -*- coding:utf-8 -*-
import re
class Solution:
def match(self, ,s, pattern):
return True if re.fullmatch(pattern, s) else False