Regex 从第二个管道中剪切的正则表达式
使用java正则表达式基本上可以减少分号分隔的属性列表Regex 从第二个管道中剪切的正则表达式,regex,expression,Regex,Expression,使用java正则表达式基本上可以减少分号分隔的属性列表 2013-07-15 21:46:26 |与詹姆斯共进晚餐|卢塞恩| MEDIATYPE;图像|类别;25 | 365 | 423 | IMGTOKEN;8ADBFB5840349CAC014052ED00F26DA |标签;晚餐|詹姆斯|卢塞恩; 我努力实现的目标是: 去掉下一个分号后的所有字符 在分号前剪切单词(在本例中为MEDIATYPE) 切断管道 预期最终结果: 2013-07-15 21:46:26与詹姆斯·卢塞恩共进晚餐
2013-07-15 21:46:26 |与詹姆斯共进晚餐|卢塞恩| MEDIATYPE;图像|类别;25 | 365 | 423 | IMGTOKEN;8ADBFB5840349CAC014052ED00F26DA |标签;晚餐|詹姆斯|卢塞恩;
我努力实现的目标是:
MEDIATYPE
)李>
2013-07-15 21:46:26与詹姆斯·卢塞恩共进晚餐
我怎样才能用正则表达式做到这一点
解决了!谢谢<代码>(.*)(=\\\\[^ |]+)对我来说很好所以你想在分号之前在管道上拆分(
)
这种模式将起作用:
\\|(?=[^|]*;)
解释
文字管道字符。双重转义是Java语法\\\\124;
这是一个查找管道后面分号的先行断言。分号前有任意数量的非管道字符(?=[^ |]*)
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
您可能会在第一个管道上使用替换,匹配后紧跟分号。我建议的原始正则表达式字符串是:
\|(?=[^|;]*;).*
这是用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与詹姆斯·卢塞恩共进晚餐
细分:
\\\\匹配文字管道
(?=开始正向前瞻
[^ |]*除管道或分号以外的任何字符
;分号
)结束正向前瞻
*这一行还有什么事吗
“正向前瞻”是指确保“切割”开始的管道后面有一个分号,中间没有任何管道或分号。使用此模式:
(.*?)(?=\|[^|;]+;)
欢迎来到堆栈溢出。似乎您需要访问并参考有关如何提出好问题的帮助。