0

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

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

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

谢谢!

4

4 回答 4

2

你可以试试

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

不幸的是,这种方法也会DirectX: 9.0c分裂Sound: DirectX compatible sound card DirectX: 9.0c

于 2013-08-29T15:03:44.550 回答
2

你可以试试

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

(见replaceAll()


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

于 2013-08-29T15:01:16.837 回答
1
String text = "blaala, blalal, alblalb, asa";
String separated[] = text.split(",");

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

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

于 2013-08-29T15:00:52.050 回答
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>
于 2013-08-29T15:09:18.543 回答