我有一些输出,如下所示:
废话废话
更多垃圾文本无关紧要
持续时间: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");
结果如下:
废话废话
更多垃圾文本无关紧要
00:02:55.34
更多垃圾文本
更多垃圾文本
显然,.* 并没有捕获换行符,因为它只替换了同一行上的文本。
- 如何让 .* 捕获换行符?
- 如果 1. 不可能,假设我不知道顶部和底部有多少行垃圾文本,有什么方法可以满足我的需要吗?
最佳答案
您需要设置点全标志:
String durationString = s.replaceAll("(?s).*Duration: (\\d\\d:\\d\\d:\\d\\d(\\.\\d\\d?)?).*", "$1");
关于java - 使用正则表达式处理换行符 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5505359/