我有一个名为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匹配即可。 实现这个的最佳方法是什么?
答案 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()
- 而不是.
- 是通配符,因此您必须以您正在使用的模式替换它们。