【问题标题】:Groovy regex match list from readlines()来自 readlines() 的 Groovy 正则表达式匹配列表
【发布时间】:2013-01-08 21:20:30
【问题描述】:

我正在尝试读取一个文本文件并返回所有不以 # 开头的行。在 python 中,我可以很容易地使用列表理解列表

with open('file.txt') as f:
     lines = [l.strip('\n') for l in f.readlines() if not re.search(r"^#", l)]

我想通过 Groovy 完成同样的事情。到目前为止,我有以下代码,非常感谢任何帮助。

lines = new File("file.txt").readLines().findAll({x -> x ==~ /^#/ })

【问题讨论】:

  • 这不行吗?您可能需要将 findAll 闭包更改为 { x -> !x.startsWith( '#' ) }
  • tim_yates - lines = new File(masterManifest).readLines().findAll({x -> !x.startsWith('#')}) 完美运行。谢谢

标签: regex groovy readlines


【解决方案1】:

在 groovy 中,您通常必须使用 collect 代替列表推导。例如:

new File("file.txt").readLines().findAll({x -> x ==~ /^#/ }).
    collect { it.replaceAll('\n', '') }

请注意,readLines() 已经去除了换行符,因此在这种情况下没有必要。

搜索,也可以使用grep()方法:

new File('file.txt').readLines().grep(~/^#.*/)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-13
    • 2018-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-26
    • 1970-01-01
    相关资源
    最近更新 更多