我的日志文件包含两个地方的五个*。文件可能很大。
Log record
*****
Log record
Log record
*****
Log record
我想获得五个之间的所有内容*。是的,我可以逐行阅读,但也许有更好的解决方案,比如在Groovy中使用正则表达式进行解析?
谢谢。
答案 0 :(得分:0)
答案 1 :(得分:0)
此正则表达式匹配第一个*****
和下一个(?<=\*{5})[\s\S]*(?=\*{5})
之间的所有内容:
{{1}}
答案 2 :(得分:0)
您还可以编写自定义阅读器,如:
class DelimitedReader extends BufferedReader {
String delimiterLine
DelimitedReader( String delimiterLine, Reader reader ) {
super( reader )
this.delimiterLine = delimiterLine
scanUntilDelimiter()
}
private scanUntilDelimiter() {
String line = super.readLine()
while( line != null && line != delimiterLine ) {
line = super.readLine()
}
}
String readLine() {
String line = super.readLine()
if( line == delimiterLine ) {
line = null
}
line
}
}
然后,你可以做这样的事情来迭代它们
new File( '/tmp/test.txt' ).withReader { r ->
new DelimitedReader( '*****', r ).eachLine { line ->
println line
}
}
这可以节省您将整个文件加载到单个(可能很大的)字符串