2 回答

TA贡献2011条经验 获得超2个赞
让pattern = "X10X", string = "11012102", n = len(pattern)- 仅用于以下说明:
如果不使用正则表达式,您的算法可能如下所示:
构造一个长度为 的字符串的所有子序列的列表n:
In[2]: parts = [string[i:i+n] for i in range(len(string) - n + 1)]
In[3]: parts
Out[3]: ['1101', '1012', '0121', '1210', '2102']
将模式与中的每个元素进行比较parts:
for part in parts:
的比较pattern用part(两者都具有现在相等的长度)将与在对应位置处的符号的符号:
for ch1, ch2 in zip(pattern, part):
如果ch1是X符号 or ch1 == ch2,则对应符号的比较将继续,否则我们将打破它:
if ch1 == "X" or ch1 == ch2:
continue
else:
break
最后,如果有符号比较所有的符号是成功的,即所有对相应的符号被耗尽,在else该分支for语句会被执行(是的,for报表可能有一个else用于这种情况下,分支)。
现在您可以使用匹配的 执行任何操作part,例如打印它或将其附加到某个列表:
else:
print(part)
所以都集中在一个地方:
pattern = "X10X"
string = "11012102"
n = len(pattern)
parts = [string[i:i+n] for i in range(len(string) - n + 1)]
for part in parts:
for ch1, ch2 in zip(pattern, part):
if ch1 == "X" or ch1 == ch2:
continue
else:
break
else:
print(part)
输出:
1101
2102
添加回答
举报