查找字符串列表中的所有子字符串并创建匹配子字符串的新列表。在Python中

时间:2017-05-21 10:10:39

标签: python string loops substring

我有一个子串列表和一个字符串列表。我想在字符串列表中找到所有匹配的子字符串。当在字符串中找到子字符串时,我想创建一个新的字符串列表,其中包含在每个字符串中找到的所有子字符串匹配。

例如,让我说我有这些:

substrings = ["word","test"]

strings = ["word string one", "string two test", "word and test", "no matches in this string"]

我创建了以下内容以将子字符串与字符串匹配:

for s in strings:
for k in substrings:
    if k in s:
        print(k)

这给出了以下输出:

word
test
word
test 

我也尝试了以下内容:

matches = [x for string in strings for x in string.split() if x in substrings]
print (matches)

输出:

['word', 'test', 'word', 'test']

这些结果都不是我所追求的。正如两个"字"和"测试"发生在第三个字符串中我希望获得类似于以下任一输出的内容:

word
test
word, test 

['word', 'test', 'word test']

2 个答案:

答案 0 :(得分:1)

对于第一个示例,您只需要在没有换行符的情况下打印它,然后在第一个循环结束时打印换行符。

如何在没有换行符的情况下进行打印: This link

答案 1 :(得分:1)

您的代码并未提供您想要的结果,因为您没有在自己的列表中保留多个匹配项。

实现所需内容的最简单方法是在循环中保留另一个列表,以包含与当前字符串匹配的子字符串。

substrings = ["word","test"]

strings = ["word string one",
           "string two test",
           "word and test",
           "no matches in this string"]

result = []    

for string in strings:
    matches = []
    for substring in substrings:
        if substring in string:
            matches.append(substring)
    if matches:
        result.append(matches)

这应该给你

[['word'], ['test'], ['word', 'test']]

如果您想以问题中所述的格式实际打印这些格式,只需更改

即可
result.append(matches)

print(' '.join(matches))

这会给你:

word
test
word test