あなたが今説明したものは、正規表現と呼ばれます(正規表現.
では「何でも」を意味しますが)...これにはすでにライブラリがあります
また、あなたの例は間違っています.."flow"
一致しません"fl*w"
が、一致します"fl.w"
import re
string2=string2.replace(".","[0-9a-zA-Z]")
print re.match(string2,string1)
これは、* で始まる場合を除いて、すべてのケースで機能するはずのステートマシンの実装です。
def matcher(pat,txt):
last = None
try:
for ltr in txt:
if ltr == pat[0]:
pat = pat[1:] #consume
elif pat[0] == "*" and ltr == last:
#dont consume
continue # dont change last
elif pat[0] == "*" and ltr == pat[1]:
pat = pat[2:] #consume 2 (* + whatever)
elif pat[0] =="*" and last == ".":
continue #dont consume and dont change last
elif pat[0] == ".":
pat = pat[1:]#consume
elif pat[1] == "*" and ltr == pat[2]:
pat = pat[3:] #consume 3 (x*X)
else:
return False
last = ltr
except IndexError:
return False #there was a problem that made it break ... it also doesnt match
if not pat or pat == "*":
return True
return False
print "Matching Pattern bo*k"
for word in "boak,bok,book,booooooook,boo,bk".split(","):
print word ," ?=",matcher("bo*k",word)
出力する
Matching Pattern bo*k
boak ?= False
bok ?= True
book ?= True
booooooook ?= True
boo ?= False
bk ?= True