如何在 Groovy 中将列表与正则表达式进行匹配

How to match a list against a regular expression in Groovy

提问人:Hemant Kumar 提问时间:8/6/2019 最后编辑:cfrickHemant Kumar 更新时间:2/16/2023 访问量:6420

问:

我有一个列表如下:

list1 = ["README.md", "test1.txt", "/desktop/openmpi.txt"]

我想从此列表中过滤掉所有带有扩展名的文件,并将结果作为布尔值返回给我。因此,如果此列表包含任何或文件,则返回 true,如果没有,则返回 false。.md.txt.md.txt

我正在尝试匹配器类实现,但它不起作用。我不确定我怎样才能一次性列出一个列表。

我的预期结果是:

  1. True:如果列表包含任何文件或文件。.md.txt
  2. False:如果列表不包含任何 or 文件。.md.txt
正则表达式 时髦

评论

0赞 cfrick 8/6/2019
还请添加您尝试过的代码并添加失败的原因。因此,其他人可以对其进行改进。

答:

14赞 Wiktor Stribiżew 8/6/2019 #1

您可以使用 any 来查看列表中是否有与正则表达式匹配的项目:/(?i)\.(?:md|txt)$/

def list1= ["README.md", "test1.txt","/desktop/openmpi.txt"]
print(list1.any { it =~ /(?i)\.(?:md|txt)$/ } )  

返回。true

在线观看 Groovy 演示

正则表达式匹配(?i)\.(?:md|txt)$

  • (?i)- 打开不区分大小写
  • \.- 一个点
  • (?:md|txt)- 非捕获组匹配 或mdtxt
  • $- 字符串的结尾。

评论

0赞 Hemant Kumar 8/6/2019
但另一种情况是,如果除了这两个扩展名(如 .sh 或 .mp3)之外,我还有其他文件,那么在这种情况下我想返回“false”。这意味着仅当此列表只有 .md 和 .txt 文件而没有其他文件时,我才想返回 true。
1赞 Wiktor Stribiżew 8/6/2019
@HemantKumar 然后用 代替 .请阅读 1.4.1。过滤和搜索.every.any
1赞 Wiktor Stribiżew 2/16/2023
@nhed链接已更新。