列表中的Python正则表达式

2024-06-16 13:21:01 发布

您现在位置:Python中文网/ 问答频道 /正文

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

#!/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\u apple-mc-stdeb”-日期.dat'. 先谢谢你。你知道吗


Tags: reapple列表date软件prodswmc
2条回答

我不知道你为什么要用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”不匹配返回的列表为空。如果在代码中添加一个print,您将看到第一次迭代返回列表项,然后返回三个空列表

findall()只返回字符串的匹配部分。更大的问题是,在每个循环迭代中都会覆盖firmware,这就是为什么如果最后一个列表元素中没有匹配项,那么它最终是空的:

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

相关问题 更多 >