正则表达式groovy不工作

时间:2017-12-04 22:15:44

标签: groovy groovy-console

请在下面找到我的代码。我试图遍历文件和目录,并打印出所有匹配到正则表达式:(&)(.+?\b) 但是这似乎不起作用(它返回一个空字符串)。我哪里出错了?

import groovy.io.FileType

class FileExample {
    static void main(String[] args) {

        def list = []

        def dir = new File("*path to dir*")
        dir.eachFileRecurse (FileType.FILES) { file ->
            list << file.name;
            def s= "${file.text}";
            def w = s.toString();
            w.readLines().grep(~/(&)(.+?\b)/)
        }
    }
}

2 个答案:

答案 0 :(得分:0)

我明白了:

import groovy.io.FileType
class FileExample {
   static void main(String[] args) {

        def list = []
        def dir = new File("/path/to/directory/containingfiles")
        def p = []
        dir.eachFileRecurse (FileType.FILES) { 
            file -> list << file.name
            def s = file.text
            def findtp = (s =~ /(&)(.+?\b)/)
            findtp.each {
                p.push(it[2])
                // As I'm only interested in the second matched group
            }
        }
        p.each { 
            println it
            }
        }
    }

现在,所有匹配的字符串都存储在数组p中,并且可以通过p [0]等在别处打印/使用。

答案 1 :(得分:0)

w.readLines().grep(~/(&)(.+?\b)/)没有做任何输出,它会为匹配的行提供返回值,因此如果您将其更改为println w.readLines().grep(~/(&)(.+?\b)/)w.readLines().grep(~/(&)(.+?\b)/).each { println it },您将获得打印的匹配行stdout

顺便说一下。

 def s= "${file.text}";
 def w = s.toString();
 w.readLines()

只是浪费时间。它与file.text.readLines()完全相同。

"${file.text}"是一个GString,用于替换评估中的占位符,但除了file.text占位符之外什么都没有,这与file.text as String或{{1}相同}}

但由于file.text.toString()实际上已经是file.text,因此它与String相同。

即使您需要file.text,因为其中不仅包含占位符,GString已经有GString方法,因此无需使用readLines()首先,即使.toString()是必要的。