python - 迭代匹配子字符串,然后删除匹配项
问题描述
我有一个 N 个字符串列表,其中包含我想要匹配的模式。我正在使用difflib
库执行此操作:
from difflib import SequenceMatcher
def longestSubstring(str1,str2):
seqMatch = SequenceMatcher(None,str1,str2)
match = seqMatch.find_longest_match(0, len(str1), 0, len(str2))
return match
a = 'grandfather's clock'
b = 'father'
longestSubstring(a, b).size # returns 6 which is the length of 'father'
我想为我可能拥有的所有字符串存储此信息(N 为 100 秒而不是 1000 秒或更高,字符串长度最大为 100)。
存储信息后,我需要按最长子字符串匹配的顺序删除这些对,然后迭代地对未匹配的字符串的其余部分进行另一次匹配。
例如
str1 = 'abcdefghijk'
str2 = 'bcde'
str3 = 'fghz'
result = {'a' : False,
'bcd': True,
'fgh': True,
'ijk': False,
'z' : False}
我目前的计划是将match.size
每对的值作为一个条目存储在一个方形numpy.array
对象中,长度等于字符串的数量。例外情况if i==j; array[i][j] = 0
是字符串自身不匹配。
例如
str1 = 'abcdefghijk'
str2 = 'bcde'
str3 = 'fghz'
matches = np.array([[0, 4, 3],
[4, 0, 0],
[3, 0, 0]])
但是我不知道如何迭代地执行此操作,尤其是当匹配位于字符串中间时。请注意,我愿意更改匹配字符串的方法,或者如果有人知道更好的方法来完成其中任何一项,则在匹配完成后迭代字符串。
如果需要更多细节,我也可以编辑问题。
解决方案
抱歉,我不能 100% 确定您真正需要什么。
您是否尝试过字符串方法?:
.split() --> 这将消除匹配并将匹配之间的字符串部分作为列表返回
.find() --> 这将返回匹配的位置,因此您可以迭代地搜索匹配并消除它们
推荐阅读
- macos - go + SDL + OpenGL + MacOS 示例 = 在 DrawArrays() 之后我得到 INVALID_OPERATION
- libreoffice - 如何添加分页符以增加页面锚定图像?
- python - 滑动窗口移动二维数组
- python - python - 执行看起来与 asyncio 同步
- python - 在 Python 中分块写入文件的原因是什么?
- html - 如何制作骨形纽扣
- python - 抓取图像:具有缩略图/图像列表而不是字符串
- r - 使用 lapply 存储在列表中的简单线性回归的汇总统计
- java - 将数组插入 BST 中序遍历
- python - 诅咒行为擦除窗口框