使用java正则表达式基本上减少分号分隔属性列表
2013-07-15 21:46:26|Dinner with James|Lucerne|MEDIATYPE;image|CATEGORY;25|365|423|IMGTOKEN;8adbfb5840349cac014052ded00f26da|TAGS;dinner|james|lucerne;
我想要达到的目的是:
MEDIATYPE
); 预期的最终结果:
2013-07-15 21:46:26|Dinner with James|Lucerne
我怎么能用正则表达式做到这一点?
解决!谢谢! (.*?)(?=\|[^|;]+;)
为我制定了
答案 0 :(得分:1)
所以你想在分号之前拆分管道(|
)?
这种模式可行:
\\|(?=[^|]*;)
解释
\\|
一个字面管道字符。双重转义是Java语法(?=[^|]*;)
这是一个先行断言,它在管道后面找到一个分号。在分号前有任意数量的非管道符号。示例:
public static void main(final String[] args) throws IOException {
final String input = "2013-07-15 21:46:26|Dinner with James|Lucerne|MEDIATYPE;image|CATEGORY;25|365|423|IMGTOKEN;8adbfb5840349cac014052ded00f26da|TAGS;dinner|james|lucerne;";
final String[] split = input.split("\\|(?=[^|]*;)");
System.out.println(split[0]);
}
输出:
2013-07-15 21:46:26|Dinner with James|Lucerne
答案 1 :(得分:0)
您可以使用替换,匹配第一个管道,后面紧跟分号。我建议的原始正则表达式字符串是:
\|(?=[^|;]*;).*
这是Java字符串中的内容:
\\|(?=[^|;]*;).*
一个例子:
String text = "2013-07-15 21:46:26|Dinner with James|Lucerne|MEDIATYPE;image|CATEGORY;25|365|423|IMGTOKEN;8adbfb5840349cac014052ded00f26da|TAGS;dinner|james|lucerne;";
String result = text.replaceAll("\\|(?=[^|;]*;).*", "");
System.out.println("Result: " + result);
应该给你:
2013-07-15 21:46:26|Dinner with James|Lucerne
故障:
\\| Match a literal pipe
(?= Begin positive lookahead
[^|;]* Any character except pipe or semicolon
; A semicolon
) End positive lookahead
.* Anything else on this line
积极的前瞻是确保在管道之后有一个分号,其中“切割”开始时不再有任何管道或分号。
答案 2 :(得分:0)