我正在尝试编写一个函数来返回较长字符串中包含通配符(每个通配符仅占一个字符)的子字符串的所有匹配项。
例如,假设我有主题字符串:
aabcddcabaabedcbabaa
,我的查询字符串是 b?d??ab
。
预期输出为:
['bcddcab', 'bedcbab']
查看其他堆栈溢出帖子,我尝试了以下操作:
import fnmatch
subject = "aabcddcabaabedcbabaa"
query = "b?d??ab"
res = fnmatch.filter(subject, query)
但这会返回一个空列表。我究竟做错了什么?我实际上正确使用了fnmatch
的filter
功能吗?预先感谢您
最佳答案
- 查询应该是
过滤器
的第二个参数,而不是第一个 filter
通过保留与查询匹配的字符串来过滤字符串列表。filter
不返回字符串的子字符串列表。如果你想用filter
过滤子字符串,你首先需要构建子字符串列表:
import fnmatch
subject = "aabcddcabaabedcbabaa"
query = "b?d??ab"
substrings = fnmatch.filter((subject[i:i+len(query)] for i in range(len(subject) - len(query))), query)
print(substrings)
输出:['bcddcab', 'bedcbab']
关于python - 查找字符串中所有出现带有通配符的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63847612/