2017-01-31 93 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() 

需要注意的是,在正则表达式,.

要从例如使用数据。