Java:使用正则表达式拆分字符串而不删除分隔符[重复]
Posted
技术标签:
【中文标题】Java:使用正则表达式拆分字符串而不删除分隔符[重复]【英文标题】:Java: Split String with Regex without deleting delimiters [duplicate] 【发布时间】:2014-10-15 04:02:14 【问题描述】:我有一个看起来像这样的字符串:
Hi, <name> pls visit <url>
现在我想用正则表达式将字符串拆分成一个数组。
我试过这个:
hi.split("(?=<[A-Za-z]+>)");
Output: [Hi, , <name> pls visit , <url>]
但我想拥有
[Hi, , <name> , pls visit , <url>]
有机会吗?
【问题讨论】:
为什么Hi,
后面多了一个空项
因为例子是Hi, ....
【参考方案1】:
String s="Hi, <name> pls visit <url>";
String[] ss = s.split("(?<=> )|(?=<)");
System.out.println(Arrays.toString(ss));
以上代码输出:
[Hi, , <name> , pls visit , <url>]
【讨论】:
【参考方案2】:您已经在使用前瞻,我相信 Java 风格的正则表达式也具有后瞻功能。所以像:
hi.split("(?=<[A-Za-z_]\\w*>)|(?<=<[A-Za-z_]\\w*>)");
(注意:我将其更改为 [A-Za-z_]\w*
所以 <_this3> 也会匹配,但 不会)
【讨论】:
【参考方案3】:你可以试试
String str="Hi, <name> pls visit <url>";
System.out.println(Arrays.toString(str.split("(?=<)|(?<=> )")));
输出:
[Hi, , <name> , pls visit , <url>]
这里是online demo
(?=<)|(?<=> )
Debuggex Demo
模式说明:
(?= look ahead to see if there is:
< '<'
) end of look-ahead
| OR
(?<= look behind to see if there is:
> '> '
) end of look-behind
【讨论】:
他想要<name>(space)
@Kent 更新感谢您的纠正。
您是如何从 reg101 获得共享链接的?必须是注册用户还是什么?我找不到那个功能。
@Kent regex101 对所有人免费。只需点击save regex
链接。你不明白吗?
谢谢,我不认为“保存正则表达式”会这样做。 :-),我一直在寻找“共享正则表达式”或“永久链接”……。像这样。以上是关于Java:使用正则表达式拆分字符串而不删除分隔符[重复]的主要内容,如果未能解决你的问题,请参考以下文章