我有一个多行字符串,由一组不同的分隔符分隔:
(Text1)(DelimiterA)(Text2)(DelimiterC)(Text3)(DelimiterB)(Text4)
我可以使用 String.split
将这个字符串分成几个部分,但似乎我无法获得与定界符正则表达式匹配的实际字符串。
换句话说,这就是我得到的:
Text1
Text2
Text3
Text4
这就是我要的
Text1
DelimiterA
Text2
DelimiterC
Text3
DelimiterB
Text4
是否有任何 JDK 方法可以使用定界符正则表达式拆分字符串,同时保留定界符?
原文由 Daniel Rikowski 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以使用 lookahead 和 lookbehind,它们是正则表达式的特性。
你会得到:
最后一个是你想要的。
((?<=;)|(?=;))
等于在;
之前或;
--- 之后选择一个空字符。编辑: Fabian Steeg 关于可读性的评论是有效的。可读性始终是正则表达式的问题。为了使正则表达式更具可读性,我所做的一件事是创建一个变量,其名称代表正则表达式的作用。您甚至可以放置占位符(例如
%1$s
)并使用 Java 的String.format
将占位符替换为您需要使用的实际字符串;例如: