当前位置: 首页 > 知识库问答 >
问题:

如何使用lambda函数和re.search从python中的文件名列表中获取子串

寇靖
2023-03-14

我有一个特定目录中的文件名列表,

list_files=[filename_ew1_234_rt,filename_ew1_456_rt,filename_ew1_78946464_rt]

我正在尝试使用re。按如下方式搜索此内容filtered_values=list(filter(lambda v:re.search('.*(ew1.rt)'),v),list_文件))

现在,当我打印过滤值时,它会再次打印整个文件名,我如何才能让它只打印文件名的某些部分

这里是我看到的

filename_ew1_234_rt

filename_ew1_456_rt

filename_ew1_78946464_rt

相反,我想

ew1_234_rt

ew1_456_rt

ew1_78946464_rt

我该怎么做?

共有3个答案

端木渝
2023-03-14

或者如果所有的文件名都以同样的方式开始,你可以把它切片。

list_files=[filename_ew1_234_rt,filename_ew1_456_rt,filename_ew1_78946464_rt]

对于已筛选的列表_文件:打印(已筛选[9:])

彭建业
2023-03-14

filter()返回满足lambda中设置的条件的元素列表,即返回true。如果条件返回No,它将被解释为False,但其他任何内容都是True。你看到这里的问题了吗?re.search()返回一个匹配对象,它可能是也可能不是无,但此匹配对象不会是搜索的结果。

一种更简单、更好的方法就是:

import re

list_files = ["filename_ew1_234_rt", "filename_ew1_456_rt", "filename_ew1_78946464_rt"]

generated = [re.search(r'(ew1.+rt)', v) for v in list_files]
filtered = [i.group() for i in generated if i != None]

print(filtered)

您可以使用基本列表理解从每个元素获取搜索结果,如果找到了结果(即未None),您可以将匹配对象分组以获取结果。

韦安怡
2023-03-14

如果lambda返回true,那么filter将具有相同的值,而不是使用filter,您可以使用2进行理解和重新定义。匹配提取组1值。

import re

list_files = ["filename_ew1_234_rt", "filename_ew1_456_rt", "filename_ew1_78946464_rt", "test"]
res = [m.group(1) for file in list_files for m in [re.match(r".*(ew1.+rt)", file)] if m]

print(res)

输出

['ew1_234_rt', 'ew1_456_rt', 'ew1_78946464_rt']

注意模式ew1。rt对于当前示例,也可以编写更具体的匹配下划线和数字的代码:

.*(_ew1_\d+_rt)$

请参阅Regex演示。

 类似资料:
  • 我想知道是否可以为AWS设置一个lambda函数,每当一个新的文本文件上传到s3 bucket时就会触发这个函数。在函数中,我想获取文本文件的内容,并以某种方式对其进行处理。我在想这有没有可能...? 例如,如果我上传了foo.txt,内容为foobarbaz,我希望在lambda函数中使用foobarbaz,这样我就可以用它来做一些事情。我知道我可以从getObject获取元数据,或者类似的方法

  • 给定对象BusinessLog,我需要为列表中的所有奖品求和 我当然可以用forEach做,但如何用lambda做, 到目前为止,我一直试图做的是,

  • 问题内容: 有没有一种简单的方法可以进入python函数并获取参数名称列表? 例如: 谢谢 问题答案: 好吧,我们实际上不需要这里。 对于Python 2.5及更高版本,请使用代替和代替。

  • 问题内容: 我有一个视图t,其中有一个用于表名的列,另一个具有where子句条件的列。 等等… 现在,我将记录放在游标中,并且我想运行每个查询。 myTable是另一个表,我要将记录用于下一个目的。 问题答案: @Akshay, 请找到下面的代码以供参考。

  • 问题内容: 但是我还需要知道: 如何在 Microsoft SQL Server (以我的情况为2008)中完成此操作? 问题答案: 您可以通过查询Information Schema视图获得此信息,甚至更多。 此示例查询:

  • 我试图使用Java8流和lambda表达式仅从我的中提取数字。首先,我要做的是将字符串从文件加载到列表。之后,我过滤stream以获得包含“PL”的字符串。 我认为现在最好的方法是删除字符串中的所有字母,只保留小数,但我有问题应该怎么做。最终的结果应该让我将list的元素解析为integer,对它们进行排序,并得到前三个元素的和。我已经做过了,但我肯定有更好的方法来做(例如,只用一个列表) 有什么