string1="abc"
string2="abdabcdfg"
我想找到string1是否是string2的子串。但是,有"."
之类的通配符可以是任意字母,y
可以是"a"
或"d"
,x
可以是"b"
或{ {1}}。
因此,"c"
将是".yx"
的子字符串。
如何仅使用一个循环对其进行编码?我想循环遍历string2并在每个索引处进行比较。我试过字典,但我想使用循环 我的代码:
string2
答案 0 :(得分:1)
我知道你特意要求使用循环解决方案。但是,我想假设一种不同的方法:您可以轻松地将模式转换为regular expression。这是一种类似于字符串模式的语言,功能更强大。然后,您可以使用re
模块检查是否可以在字符串中找到该正则表达式(以及子字符串模式)。
def to_regex(pattern, table):
# join substitutions from table, using c itself as default
return ''.join(table.get(c, c) for c in pattern)
import re
symbols = {'.': '[a-z]', '#': '[ad]', '+': '[bc]'}
print re.findall(to_regex('.+#', symbols), 'abdabcdfg')
如果您更喜欢“动手”解决方案,可以使用循环来使用它。
def find_matches(pattern, table, string):
for i in range(len(string) - len(pattern) + 1):
# for each possible starting position, check the pattern
for j, c in enumerate(pattern):
if string[i+j] not in table.get(c, c):
break # character does not match
else:
# loop completed without triggering the break
yield string[i : i + len(pattern)]
symbols = {'.': 'abcdefghijklmnopqrstuvwxyz', '#': 'ad', '+': 'bc'}
print list(find_matches('.+#', symbols, 'abdabcdfg'))
两种情况下的输出都是['abd', 'bcd']
,即使用这些替换可以找到两次。