所以我想说我有3个项目清单:
myString = "prop zebra cool"
items = myString.split(" ")
#items = ["prop", "zebra", "cool"]
另一个列表 内容 ,其中包含大量字符串项。它实际上是一个文件列表。
现在我想只获取包含所有 项目
内容 的项目>所以我开始这样:
assets = []
for c in content:
for item in items:
if item in c:
assets.append(c)
然后以某种方式仅隔离 资产 列表中重复的项目
这样可以正常工作。但我不喜欢它,它不优雅。我确信在python
中还有其他一些方法可以解决这个问题答案 0 :(得分:0)
如果我正确解释您的问题,您可以使用https://www.scalescale.com/tips/nginx/configure-max_execution_time-in-php-fpm-using-nginx/#。
在您的情况下,假设:
content = [
"z:/prop/zebra/rig/cool_v001.ma",
"sjasdjaskkk",
"thisIsNoGood",
"shakalaka",
"z:/prop/zebra/rig/cool_v999.ma"
]
string = "prop zebra cool"
您可以执行以下操作:
assets = []
matchlist = string.split(' ')
for c in content:
if all(s in c for s in matchlist):
assets.append(c)
print assets
替代方法
如果你想拥有更多控制权(即你想确保你只匹配你的单词以指定顺序出现的字符串),那么你可以使用正则表达式:
import re
# convert content to a single, tab-separated, string
contentstring = '\t'.join(content)
# generate a regex string to match
matchlist = [r'(?:{0})[^\t]+'.format(s) for s in string.split(' ')]
matchstring = r'([^\t]+{0})'.format(''.join(matchlist))
assets = re.findall(matchstring, contentstring)
print assets
假设\t
的字符串中没有显示content
,您可以将其用作分隔符并将列表加入单个字符串中(显然,您可以选择更适合您的其他分隔符) )。
然后,您可以构建正则表达式,使其匹配包含您的单词和任何其他字符的任何子字符串,\t
除外。
在这种情况下,matchstring
会导致:
([^\t]+(?:prop)[^\t]+(?:zebra)[^\t]+(?:cool)[^\t]+)
其中:
(?:word)
表示word
已匹配但未返回[^\t]+
表示除\t
之外的所有字符都匹配()
将返回与您的规则匹配的整个字符串(在本例中为z:/prop/zebra/rig/cool_v001.ma
和z:/prop/zebra/rig/cool_v999.ma
)