【问题标题】:Java regex for adjusting whitespace用于调整空格的 Java 正则表达式
【发布时间】:2014-08-10 10:02:46
【问题描述】:

我知道这是以下问题的混合体:trim whitespace from a string?Regex or way to replace multiple space with single space

而且我知道可以将这两种解决方案结合起来:

String mystring = "   brains    T1*   C+   ";
mystring = mystring.trim().replaceAll("[ ]+", " ");

输出:brains T1* C+

但我的问题:

是否可以使 trim 成为单个正则表达式的一部分?

mystring.replaceAll("#regex");

【问题讨论】:

  • 单一正则表达式是什么意思?不是一个正则表达式吗?您的预期输出是什么?
  • @Braj 我认为他不想使用 trim() 而是让 trim() 成为正则表达式的一部分

标签: java regex


【解决方案1】:

是的,您可以:

mystring = mystring.replaceAll("^\\s+|(?<=\\s)\\s+|\\s+$", "");

Demo on ideone.

这个表达式背后的想法是分别匹配初始和尾随空格(通过使用^\\s+\\s+$ 表达式),并且还通过在前瞻中使用它来“屏蔽”一个空格以防止删除。这是最有趣的部分:(?&lt;=\\s)\\s+ - 它说“匹配一个或多个空格,当它们前面正好有一个空格时”。 (?&lt;=\\s) 匹配我们想要保留的空间; \\s+ 匹配“不需要的”。

【讨论】:

    【解决方案2】:

    你可以使用

    replaceAll("(?:^\\s+|\\s+$)|\\s+(\\s)", "$1")
    

    或更简单,因为我们实际上并不需要 non-capturing-group (?:XXX)

    replaceAll("^\\s+|\\s+$|\\s+(\\s)", "$1")
    

    想法是用一个空格替换不在字符串开头或结尾的一个或多个空格,因此我们将使用该匹配项中的最后一个空格(放在第 1 组中)。

    如果将空格放置在字符串的开头或结尾,我们不希望第 1 组包含任何内容,因此我们只在需要检查正则表达式的不同情况下编写它们(我们可以使用 OR |)。重要的部分是将这些特殊情况放在 case with group 之前,因为正则表达式引擎会尝试从左到右匹配 case。

    演示

    String mystring = "   brains    T1*   C+   ";
    System.out.println(">"+mystring.replaceAll("^\\s+|\\s+$|\\s+(\\s)", "$1")+"<");
    

    输出:

    >brains T1* C+<
    

    【讨论】:

      【解决方案3】:
      public static void main(String[] args) {
          // TODO Auto-generated method stub
          String mystring = "   brains    T1*   C+   ";
          System.out.println("-"+mystring.replaceAll("(^\\s+|\\s+$|(?<=\\w+.?\\s)\\s+)", "")+"-");
      }
      

      任何以空格(^\s+、\s+$)开头或结尾的内容都将被替换为空字符串。 或者任何有一个单词后跟多个空格的东西都被一个空字符串替换。这 ”。”用于持有“*”。

      【讨论】:

      • \\w+.? in (?&lt;=\\w+.?\\s) 是不必要的。您可以简单地使用(?&lt;=\\s),如已接受的答案所示:) 另外,为什么要用括号括住整个正则表达式?已经有组 0 存储了整个正则表达式的匹配项。
      猜你喜欢
      • 1970-01-01
      • 2015-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-17
      • 1970-01-01
      • 2019-07-07
      相关资源
      最近更新 更多