如何在以冒号结尾的每个单词之前添加换行符?

时间:2013-08-29 14:58:30

标签: java regex

我有一堆看起来像这样的数据:

  

最低系统要求CPU:Celeron M 420 1.6GHz,Sempron 3100+   RAM:1 GB VGA:GeForce 205,Radeon HD 6320 OS:Windows XP / Windows   Vista / Windows 7 / Windows 8 HDD:4 GB声音:DirectX兼容声音   卡DirectX:9.0c

我正试图找到一种方法来组织它,以便以后更容易阅读。我想在每个附加冒号的单词之前添加一个换行符是最简单的方法,但是我对Regex并不太熟悉,我真的不知道如何处理这个问题。我只是单独搜索每个单独的组件,如“CPU:”,“OS:”等,但它不是很一致。有时它被列为处理器,有时它是CPU。有时它是RAM,有时是它的记忆。

谢谢!

4 个答案:

答案 0 :(得分:2)

你可以尝试

str = str.replaceAll("(?=\\b\\w+:)", "\n");

(见replaceAll()


(?=\b\w+:)是一个positive lookahead,它会找到所有0长度的子字符串,后跟\b\w+:(但在实际匹配中不包括\b\w+:)。 \bword-boundary\w+是一个或多个单词字符(字母数字字符和下划线,相当于[A-Za-z0-9_])。最后,:是一个字面冒号。我们将此正则表达式的所有0长度匹配替换为换行符\n

答案 1 :(得分:2)

您可以尝试使用

System.out.println(yourData.replaceAll("\\w+:", "\n$0"));
  • 第一个参数是正则表达式,表示字符串,数字或_在其末尾有:
  • 第二个参数会将匹配的子字符串替换为新行\n$0,这意味着group(0)保存匹配的子字符串

不幸的是,此方法还会在DirectX: 9.0c

中拆分Sound: DirectX compatible sound card DirectX: 9.0c

答案 2 :(得分:1)

String text = "blaala, blalal, alblalb, asa";
String separated[] = text.split(",");

for (int i=0; i<separated.length(); i++){
    System.out.println(separated[i]);
}

这将使您有机会在将来单独使用每一行。

答案 3 :(得分:1)

在这些情况下,我在vim中打开文件,然后进行搜索和替换。在vim类型:

:%s/\(\S\+\:\)/\r\1/g

这会将该行转为:

 Minimum system requirements 
 CPU: Celeron M 420 1.6GHz, Sempron 3100+ 
 RAM: 1 GB 
 VGA: GeForce 205, Radeon HD 6320 
 OS: Windows XP/Windows Vista/Windows 7/Windows 8
 HDD: 4 GB 
 Sound: DirectX compatible sound card 
 DirectX: 9.0c

这也可以在命令行上完成:

sed -i 's/\(\S\+\:\)/\n\1/g' <filename>