python匹配linux萬用字元
阿新 • • 發佈:2018-11-10
有時候需要匹配linux中的萬用字元,例如*和?,它們的含義為:
*:匹配0個或多個字元;
?:匹配任意單個字元。
這和正則表示式中含義不一樣,在正則表示式中:
*:匹配前一個字元0次或者多次;
?:匹配前一個字元1次。
這時候可以使用下面的函式,s表示需要匹配的字串,p表示含有萬用字元的字串。
def match_wildcard(s, p): dp = [[False for i in range(len(p) + 1)] for j in range(len(s) + 1)] dp[0][0]= True for i in range(1, len(p) + 1): if p[i - 1] == '*': dp[0][i] = dp[0][i - 1] for i in range(1, len(s) + 1): for j in range(1, len(p) + 1): if p[j - 1] == '*': dp[i][j] = dp[i][j - 1] or dp[i - 1][j - 1] or dp[i - 1][j]else: dp[i][j] = (s[i - 1] == p[j - 1] or p[j - 1] == '?') and dp[i - 1][j - 1] return dp[len(s)][len(p)]