我有一堆看起来像这样的数据:
最低系统要求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,有时是它的记忆。
谢谢!
答案 0 :(得分:2)
你可以尝试
str = str.replaceAll("(?=\\b\\w+:)", "\n");
(见replaceAll()
)
(?=\b\w+:)
是一个positive lookahead,它会找到所有0长度的子字符串,后跟\b\w+:
(但在实际匹配中不包括\b\w+:
)。 \b
是word-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>