正規表示式匹配 python

2021-10-13 19:56:33 字數 1761 閱讀 1938

# -*- coding:utf-8 -*-

'''題目:請實現乙個函式用來匹配包括'.'和'*'的正規表示式。

模式中的字元'.'表示任意乙個字元(不包括空字元!),而'*'表示它前面的字元可以出現任意次(包含0次)。

在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串"aaa"與模式"a.a"和"ab*ac*a"匹配,但是與"aa.a"和"ab*a"均不匹配

'''class

solution

:# s, pattern都是字串

defmatch

(self, s, pattern)

:# 如果s與pattern都為空,則true

iflen

(s)==

0and

len(pattern)==0

:return

true

# 如果s不為空,而pattern為空,則false

elif

len(s)!=0

andlen

(pattern)==0

:return

false

# 如果s為空,而pattern不為空,則需要判斷

elif

len(s)==0

andlen

(pattern)!=0

:# pattern中的第二個字元為*,則pattern後移兩位繼續比較

iflen

(pattern)

>

1and pattern[1]

=='*'

:return self.match(s, pattern[2:

])else

:return

false

# s與pattern都不為空的情況

else

:# pattern的第二個字元為*的情況

iflen

(pattern)

>

1and pattern[1]

=='*'

:# s與pattern的第乙個元素不同,則s不變,pattern後移兩位,相當於pattern前兩位當成空

if s[0]

!= pattern[0]

and pattern[0]

!='.'

:return self.match(s, pattern[2:

])else

:# 如果s[0]與pattern[0]相同,且pattern[1]為*,這個時候有三種情況

# pattern後移2個,s不變;相當於把pattern前兩位當成空,匹配後面的

# pattern後移2個,s後移1個;相當於pattern前兩位與s[0]匹配

# pattern不變,s後移1個;相當於pattern前兩位,與s中的多位進行匹配,因為*可以匹配多位

return self.match(s, pattern[2:

])or self.match(s[1:

], pattern[2:

])or self.match(s[1:

], pattern)

# pattern第二個字元不為*的情況

else

:if s[0]

== pattern[0]

or pattern[0]

=='.'

:return self.match(s[1:

], pattern[1:

])else

:return

false

Python 正規表示式匹配

請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 coding utf 8 ...

正規表示式 匹配

字串 void abtr quint32 ab 表示乙個正規表示式 template class bidirectionaliterator class allocator std allocator sub match bidirectionaliterator class match resul...

正規表示式匹配

請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 解法 首先要想到用遞迴處理...