我有一个子串列表和一个字符串列表。我想在字符串列表中找到所有匹配的子字符串。当在字符串中找到子字符串时,我想创建一个新的字符串列表,其中包含在每个字符串中找到的所有子字符串匹配。
例如,让我说我有这些:
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']
答案 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