首页 > 解决方案 > 迭代匹配子字符串,然后删除匹配项

问题描述

我有一个 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]])

但是我不知道如何迭代地执行此操作,尤其是当匹配位于字符串中间时。请注意,我愿意更改匹配字符串的方法,或者如果有人知道更好的方法来完成其中任何一项,则在匹配完成后迭代字符串。

如果需要更多细节,我也可以编辑问题。

标签: pythondesign-patternsiterationdifflib

解决方案


抱歉,我不能 100% 确定您真正需要什么。

您是否尝试过字符串方法?:

.split() --> 这将消除匹配并将匹配之间的字符串部分作为列表返回

.find() --> 这将返回匹配的位置,因此您可以迭代地搜索匹配并消除它们


推荐阅读