2017-01-31 128 views
0

我有一個叫做Pattern的類,裏面有兩個方法,等同於setwildcard。相當於返回其中一個子第一次出現在字符串中的索引,setwildcard在一個子集通配符Python中的通配符匹配

所以

p = Pattern('xyz') 
t = 'xxxxxyz' 
p.equates(t) 

返回4

而且

​​

返回4,因爲*是通配符,只要x和z匹配,就可以匹配t中的任何字母。 實現這個最好的方法是什麼?

+1

歡迎來到StackOverflow。請閱讀並遵守幫助文檔中的發佈準則。 [在主題](http://stackoverflow.com/help/on-topic)和[如何提問](http://stackoverflow.com/help/how-to-ask)適用於此處。一般來說,解決這個問題的「正確」方法是實現* some *解決方案,然後要求改進CodeReview.StackExchange.com – Prune

回答

0

看起來你基本上實現了正則表達式的一個子集。幸運的是,Python有一個內置的庫!如果你不熟悉正則表達式(或者像他們的朋友稱之爲正則表達式)的工作方式,我強烈建議你仔細閱讀documentation for them

在任何情況下,該功能re.search是,我認爲,你在尋找什麼。這需要,作爲第一個參數,模式匹配,並且,作爲第二個參數,該字符串在匹配。如果模式匹配,search返回一個SRE_Match對象,該對象,適宜地,具有#start()方法,該方法返回比賽開始的索引。 - 不* - 是通配符,所以你不得不更換他們在你使用的模式

import re 
start_index = re.search(r'x.z', 'xxxxxgzg').start() 

需要注意的是,在正則表達式,.

要從例如使用數據。