Java:使用Regex拆分字符串而不删除分隔符

时间:2014-08-21 13:33:28

标签: java regex

我有一个看起来像的字符串:

Hi, <name> pls visit <url>

现在我想将字符串拆分为带有正则表达式的数组。

我试过这个:

hi.split("(?=<[A-Za-z]+>)");
Output: [Hi, , <name> pls visit , <url>]

但我想拥有

[Hi, , <name> , pls visit , <url>]

有机会这样做吗?

3 个答案:

答案 0 :(得分:4)

String s="Hi, <name> pls visit <url>";
String[] ss = s.split("(?<=> )|(?=<)");
System.out.println(Arrays.toString(ss));

以上代码输出:

[Hi, , <name> , pls visit , <url>]

答案 1 :(得分:2)

你可以尝试

String str="Hi, <name> pls visit <url>";
System.out.println(Arrays.toString(str.split("(?=<)|(?<=> )")));

输出:

[Hi, , <name> , pls visit , <url>]

这是online demo


(?=<)|(?<=> )

Regular expression visualization

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

答案 2 :(得分:0)

你已经在使用前瞻,我相信正则表达式的Java风格也有所了解。如下所示:

hi.split("(?=<[A-Za-z_]\\w*>)|(?<=<[A-Za-z_]\\w*>)");

(注意:我将其更改为[A-Za-z_]\w*所以&lt; _this3&gt;也会匹配,但&lt; 5thing&gt;不会)