【问题标题】:Matching a substring from a substring list in a list of strings匹配字符串列表中子字符串列表中的子字符串
【发布时间】:2023-03-28 06:05:01
【问题描述】:

我有一个包含大约 10000 个条目的子字符串列表 -

substr_ls = ['N_COULT16_1 1', 'S_COULT2', 'XBG_F 1', 'FAIRWY_3', .....]

我有一个包含大约 100 个条目的字符串列表 -

main_str_ls = ['N_COULT16_1 1XF', 'S_COULT2_RT', 'XBG_F TX300 1', 'FAIRWY_34_AG', ....]

如您所见,子字符串不是来自main_str_ls 的字符串的完美子字符串。子字符串中的字母、数字等序列必须与字符串中的序列匹配才能匹配。例如 - 'XBG_F 1''XBG_F TX300 1' 匹配,因为即使在 'XBG_F''1' 中间有一个 'TX300' ,我现在正在使用这个函数 -

def is_subsequence(pattern, items_to_use):
    items_to_use = (x for x in items_to_use)
    return all(any(x == y for y in items_to_use) for x, _ in itertools.groupby(pattern))

Finding a substring in a jumbled string 迭代main_str_lsmain_str_ls 的内容用作items_to_use)和substr_lssubstr_ls 的内容用作pattern),当我找到匹配项时,它会中断循环并做一些事情。像这样 -

for main_str in main_str_ls:
    main_str = main_str.strip()
    for substr in substr_ls:
        substr = substr.strip() 
        if is_subsequence(substr, main_str):
            **do stuff**

有没有更好的方法或pythonic方法来做到这一点?

【问题讨论】:

  • 我会将substr_ls 列表更改为正则表达式re_str_ls 的列表。 "XBG_F 1" 可以变成r"XBG_F.*1",然后使用if re.match(re_str, test_str): ...

标签: python string list substring


【解决方案1】:

您需要什么与混乱的字符串问题之间的区别之一是他们关心允许重复。我认为您不能直接使用该设计。 相反,试试这个链接https://www.geeksforgeeks.org/given-two-strings-find-first-string-subsequence-second/

【讨论】:

  • 最好的方法仍然是遍历这两个列表,对吧?
  • 是的,复杂度是 O(MN(L1+L2))。鉴于您的问题规模,我认为这是可行的
猜你喜欢
  • 2013-06-18
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
  • 2021-07-15
  • 2019-07-27
  • 1970-01-01
  • 2013-03-07
  • 1970-01-01
相关资源
最近更新 更多