【问题标题】:Java RegEx: Split without losing tokenJava RegEx:拆分而不丢失令牌
【发布时间】:2011-07-18 20:28:09
【问题描述】:

我正在尝试编写正则表达式,当有空格后跟负号后跟非空格时,它将拆分字符串。

例子:

"x -y".split(regex)
returns: String[]{"x","-y"};

目前我正在使用

(?<=\\s)-(?=\\S+)

对于我的正则表达式;但这会返回 "x","y" 并吃掉负号。有什么办法不吃负号?

谢谢!

【问题讨论】:

  • \s(?=\-\S) 也许?找到空格,但要确保有一个负号后跟一个非空格字符。 (demo)

标签: java regex lookahead


【解决方案1】:

如果您要拆分的值之间总是有空格,请考虑使用以下内容:

"x -y".split("-");

记得把-放回去(如果需要的话)。

【讨论】:

  • 只有在有负号时才应该拆分。但是您可以按' -' 拆分。
  • 谢谢,我已将您的建议纳入我的回答中。
【解决方案2】:

图案:

\s(?=\-\S)

示例”

 String:  x -y z -x y z
Matches:   ^    ^

插入符号指向匹配项

演示:

Example Code

【讨论】:

    【解决方案3】:

    您正在捕获用于拆分的减号。因此它被删除。

    两种可能的解决方案:

    a) 将其添加到第二个匹配项中,因为它必须存在,否则拆分不会返回此结果 b) 改为尝试(\S*) (\S.*) 并进行匹配。这将返回两个结果,“x”和“-y”。

    如果拆分功能如此简单,请考虑使用字符串拆分功能。它比正则表达式快得多。

    var result = "x -y".split(" -");
    if (result.length == 2) result[1] = "-" + result[1];
    

    http://gskinner.com/RegExr/ 是一个检查正则表达式的好网站。如果您将您的正则表达式与 Howards 进行比较,您会看到不同之处。如果你也拿我的来做一场比赛。

    【讨论】:

      【解决方案4】:

      你可以在第二组中加入减号

      \\s(?=-\\S+)
      

      这会给你想要的结果。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-23
        • 2021-07-06
        • 2021-07-14
        • 2015-10-09
        • 1970-01-01
        • 2012-01-09
        • 2011-12-26
        相关资源
        最近更新 更多