【问题标题】:Java: Split String with Regex without deleting delimiters [duplicate]Java:使用正则表达式拆分字符串而不删除分隔符[重复]
【发布时间】: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, ....

标签: java regex


【解决方案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 链接。你不明白吗?
      • 谢谢,我不认为“保存正则表达式”会这样做。 :-),我一直在寻找“共享正则表达式”或“永久链接”……。像这样。
      猜你喜欢
      • 1970-01-01
      • 2014-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-18
      相关资源
      最近更新 更多