正則判斷內容不為空 劍指offer 正規表示式匹配

2021-10-18 10:57:29 字數 1718 閱讀 7923

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

def match(s, pattern):

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

if len(s) == 0 and len(pattern) == 0:

return true

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

elif len(s) != 0 and len(pattern) == 0:

return false

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

elif len(s) == 0 and len(pattern) != 0:

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

if len(pattern) > 1 and pattern[1] == '*':

return match(s, pattern[2:])

else:

return false

# s與pattern都不為空的情況

else:

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

if len(pattern) > 1 and pattern[1] == '*':

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

if s[0] != pattern[0] and pattern[0] != '.':

return 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 match(s, pattern[2:]) or match(s[1:], pattern[2:]) or match(s[1:], pattern)

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

歡迎關注,一起學習

劍指offer 正規表示式匹配

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

劍指Offer 正規表示式匹配

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

劍指offer 正規表示式匹配

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