Python中的通配符匹配

时间:2017-01-31 23:04:54

标签: python string match wildcard matching

我有一个名为Pattern的类,其中有两个方法,equates和setwildcard。 Equates返回子字符串首次出现在字符串中的索引,setwildcard在子字符串中设置通配符

所以

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

返回4

另外

p = Pattern('x*z', '*')
t = 'xxxxxgzx'
p.equates(t)

返回4,因为*是通配符并且可以匹配t中的任何字母,只要x和z匹配即可。 实现这个的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

正则表达式,如已接受的答案所示,是处理问题的一种方法。虽然,如果您需要更简单的模式(例如Unix shell样式的通配符),则内置的fnmatch库可以提供帮助:

表达式:

  • getChallenges(patientUUID: string): Observable<ChallengeDTO[]> { return this.challengeService.getActive('0d584905-fc20-4723-870a-0f0214419507'); } -匹配所有内容
  • *-匹配任何单个字符
  • ?-匹配[seq]中的任何字符
  • seq-匹配[!seq]以外的任何字符

例如,尝试查找与seq匹配的任何内容:

localhost

其中一个很好的部分是import fnmatch my_pattern = "http://localhost*" name_to_check = "http://localhost:8080" fnmatch.fnmatch(name_to_check, my_pattern) # True 不被认为是一个特殊字符,因此对于文件名/ URL匹配,此效果很好,无需预先转义所有斜杠!

答案 1 :(得分:0)

看起来你实际上是在实现正则表达式的一个子集。幸运的是,Python有一个内置的库!如果您不熟悉正则表达式(或者,如他们的朋友称之为正则表达式)的工作方式,我强烈建议您仔细阅读documentation for them

无论如何,我认为函数java.net.ConnectException: Connection refused正是您正在寻找的。作为第一个参数,它需要匹配的模式,以及作为其第二个参数的匹配它的字符串。如果模式匹配,re.search返回一个search对象,方便,有一个SRE_Match方法,返回匹配开始的索引。

使用示例中的数据:

#start()

请注意,在正则表达式中, import re start_index = re.search(r'x.z', 'xxxxxgzg').start() - 而不是. - 是通配符,因此您必须以您正在使用的模式替换它们。