列表中的Python正则表达式

列表中的Python正则表达式,python,regex,list,Python,Regex,List,我有一个列表,其中包含构建服务器中构建的不同软件的列表。我只想要一个具体的。我已经为它编写了正则表达式,但是得到了空字符串。代码如下: #!/usr/bin/env python import re lists = ['sw_apple-mc-stded-date.dat', 'sw_apple-mc-prod-date.dat', 'sw_android-mc-prod-date.dat', 'sw_android-mc-stded-date.dat'] regex = re.compile

我有一个列表,其中包含构建服务器中构建的不同软件的列表。我只想要一个具体的。我已经为它编写了正则表达式,但是得到了空字符串。代码如下:

#!/usr/bin/env python
import re

lists = ['sw_apple-mc-stded-date.dat', 'sw_apple-mc-prod-date.dat', 'sw_android-mc-prod-date.dat', 'sw_android-mc-stded-date.dat']
regex = re.compile('sw_apple-mc-stded')
for list in lists:
    firmware = regex.findall(list)
return firmware

我得到的是一个空的固件列表,而不是“sw_apple-mc-stdeb-date.dat”。提前谢谢。

我不知道您为什么要使用
regex=re.compile('sw_apple-mc-stdeb')
,您只需检查列表项中是否有字符串匹配即可

weird_lists = ['sw_apple-mc-stded-date.dat', 'sw_apple-mc-prod-date.dat', 'sw_android-mc-prod-date.dat', 'sw_android-mc-stded-date.dat']

for item in weird_lists:
    if "sw_apple-mc-stded" in item:
        print item
在代码中,执行以下操作:

for list in lists:
    firmware = regex.findall(list)
return firmware
return firmware返回上一次迭代中的项目列表(如果它与您的“regex”匹配),因为只有1个项目,并且它与您的“regex”不匹配。返回的列表为空。如果在代码中添加打印,您将看到第一次迭代返回列表项,然后三个空列表将只返回字符串的匹配部分。更大的问题是,在每次循环迭代中,您都会覆盖
固件
,这就是为什么如果最后一个列表元素中没有匹配项,那么它最终是空的:

regex = re.compile('sw_apple-mc-stded.*')  # add wildcard at the end to match entire string
firmware = []
for list in lists:
    firmware.extend(regex.findall(list))  # extend as findall returns a list
return firmware
但是,对于此任务,我认为简单的contains检查可以:

prefix = 'sw_apple-mc-stded'
firmware = [s for s in lists if prefix in s]
# firmware = [s for s in lists if s.startswith(prefix)]
return firmware

stded
不是
stdeb
。你知道你不需要正则表达式来破解这个吗?(除非我们缺少详细信息……
regex.findall(列表)
可能吗?顺便说一句,
文件
列表
都是一个重要的名称选择。它们使用该名称屏蔽内置项。此外,您的代码将只返回上次检查的结果,而不返回其他内容。进行了相应的更改。请检查编辑。您希望看到什么?结果是“sw_apple-mc-stded-date.dat”,我希望字符串是“sw_apple-mc-stded-date.dat”。但得到的是空字符串。谢谢。您使用的方法不值得使用Regex。正如@Klaus D.所提到的,它返回一个空列表,因为您遍历所有列表项并执行findall 1乘1,最后一项不匹配,因此列表为空