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

【讨论】:

他想要&lt;name&gt;(space) @Kent 更新感谢您的纠正。 您是如何从 reg101 获得共享链接的?必须是注册用户还是什么?我找不到那个功能。 @Kent regex101 对所有人免费。只需点击save regex 链接。你不明白吗? 谢谢,我不认为“保存正则表达式”会这样做。 :-),我一直在寻找“共享正则表达式”或“永久链接”……。像这样。

以上是关于Java:使用正则表达式拆分字符串而不删除分隔符[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用正则表达式拆分字符串而不消耗拆分器部分?

C# 使用 Regex.Split 拆分大字符串。必须保留分隔符

将字符串拆分为数组而不删除分隔符?

使用正则表达式在Oracle中按分隔符拆分字符串

将字符串拆分为具有多个分隔符的多个字符串而不删除?

Java - 基于多个分隔符拆分字符串