您将如何编写一个接受两个字符串并在它们匹配时返回 true 的函数(不使用正则表达式)。
约束条件如下:
- 字符串 1(要匹配的文本)将包含字母和数字。
- 字符串 2,模式,将是字母、数字、
.
和*
,其中.
表示将考虑字母或数字作为匹配项,*
表示前一个字符重复 0 次或多次。
例如:
Text: Facebook
Pattern: F.cebo*k
returns True
最佳答案
对此并不感到特别自豪(@JoranBeasley 的回答是最好的),但这将在没有正则表达式的情况下(似乎)起作用:
def Matcher(pattern, text):
comp = zip(pattern, text)
for i, vals in enumerate(comp):
if vals[0] != vals[1]:
if vals[0] == '.' and vals[1].isalnum():
continue
elif vals[0] == '*' and vals[1] == comp[i-1][0]:
continue
else:
return False
return True
print 'F.cebo*k -> Facebook'
print Matcher('F.cebo*k', 'Facebook')
print 'St.c.koverflow -> Stackoverflow'
print Matcher('St.c.koverflow', 'Stackoverflow')
# And for nostalgia...
print 'St.ckoverfl*w -> Stackoverfllw'
print Matcher('St.ckoverfl*w', 'Stackoverfllw')
我确定它充满了错误(比如字符串以 *
开头),但我的代码通常是错误的。
关于java - 检查两个字符串是否与字母、数字和特殊字符匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13144590/