在newlines Java上使用正则表达式

时间:2011-03-31 19:40:31

标签: java regex newline

我有一些输出,如下所示:

blat blah垃圾文本
更多垃圾文本无关紧要 持续时间:00:02:55.34,开始:0.000000,比特率:4097 kb / s
更多垃圾文本
更多垃圾文本

在java中,我使用正则表达式将此行转换为普通旧的 00:02:55.34
但它并没有取代顶部和底部的线条。使用这行代码:

String durationString = s.replaceAll(".*Duration: (\\d\\d:\\d\\d:\\d\\d(\\.\\d\\d?)?).*", "$1");  

结果如下:

blat blah垃圾文本
更多垃圾文本无关紧要 00:02:55.34
更多垃圾文本
更多垃圾文本

显然,。*并没有抓住换行符,因为它只替换了同一行上的文字。

  1. 如何让。*抓住换行符?
  2. 如果1.不可能,有没有办法做我需要的,假设我不知道顶部和底部有多少行垃圾文本?

3 个答案:

答案 0 :(得分:3)

您需要设置dot-all标志:

String durationString = s.replaceAll("(?s).*Duration: (\\d\\d:\\d\\d:\\d\\d(\\.\\d\\d?)?).*", "$1");  

答案 1 :(得分:0)

试试这个:

String durationString = s.replaceAll(".*Duration: (\\d\\d:\\d\\d:\\d\\d(\\.\\d\\d?)?).*|.*", "$1");

答案 2 :(得分:0)

您需要使用Pattern.DOTALL标志来说明.应该与换行符匹配。 或使用(?s)指定模式中的标志,例如

String regex = "(?s).*Duration: (\\d\\d:\\d\\d:\\d\\d(\\.\\d\\d?)?).*";