Python 在没有空格的字符串中查找单词

Python 在没有空格的字符串中查找单词,python,regex,Python,Regex,我有一个没有空格的字符串。例如system-gnome-theme-60.0.2-1.el6。 我必须签入其他100个这样的字符串(没有空格),其中包含一些以前指定的单词;e、 g.gnome,samba 如何在python中实现它 随samba附加的字符串中可以有任何前缀或后缀。我必须检测它们,我该怎么办 目前我已经做到了: for x in array_actual: for y in array_config: print x.startswith(y)

我有一个没有空格的字符串。例如
system-gnome-theme-60.0.2-1.el6
。 我必须签入其他100个这样的字符串(没有空格),其中包含一些以前指定的单词;e、 g.
gnome
samba

如何在python中实现它

samba
附加的字符串中可以有任何前缀或后缀。我必须检测它们,我该怎么办

目前我已经做到了:

for x in array_actual:
    for y in array_config:
        print x.startswith(y)
        print ans

这是完全错误的,因为它只检查字符串的第一个字。该单词可以位于任何文本之间的任何位置。

请使用
中的
操作符,而不是使用
str.startswith()

if y in x:
all_words = re.compile('|'.join([re.escape(line.split(None, 1)[0]) for line in array_config]))

for x in array_actual:
    if all_words.search(x):
或者将正则表达式与管道操作符一起使用:

if y in x:
all_words = re.compile('|'.join([re.escape(line.split(None, 1)[0]) for line in array_config]))

for x in array_actual:
    if all_words.search(x):
'|'.join([…])
列表理解首先会转义每个单词(确保元字符按字面匹配,并且不会被解释为正则表达式模式)。对于列表
['gnome','samba']
这将创建模式:

gnome|samba

匹配任何包含任何一个单词的字符串。

当我被这个“问题”弄糊涂时,所提到的字符串的预期输出是什么?列表在一个文件中。我无法显式地声明列表。.for循环正在读取需要搜索的单词。另外,如果x中的y在所有情况下都不起作用。@user2779092:然后首先从该文件中读取单词,并将其放入列表中。别忘了去掉换行符和其他空白。无论如何,您都不能重复循环文件对象,每次都必须重新打开或倒带指向起始位置的文件指针。@user2779092:重复读取文件也不是一个好主意,因为从磁盘读取文件比仅将其作为列表存储在内存中要慢。不象您那样嵌套循环,而是使用正则表达式,会更快。对于数组中的行,配置:t=line.partition(“”)[0]x\u配置.append(t)对于数组中的行,实际:if line.search(x\u配置):打印“FOUND”我制作了一个数组并将其传递给该行。search..但它会说没有要搜索的对象。@user2779092:
x\u config=[line.split(None,1)[0]for line in ARRAY\u config]
可以一次性完成
line.search(x_config)
将不起作用,因为字符串没有
.search()
方法。我的答案中的
.search()
是编译正则表达式的一种方法。