【问题标题】:Regex to remove whitespace in between quotes but not between words inside the quotes?正则表达式删除引号之间的空格而不是引号内的单词之间的空格?
【发布时间】:2017-11-24 16:41:41
【问题描述】:

我正在用 Java 编程。

我正在努力改变这一点:

Text0 Text1 " Text2 Text3 Text4     "   Text5 Text6

进入这个:

Text0 Text1 "Text2 Text3 Text4" Text5 Text6

我尝试过前瞻和后瞻:

(?

设法匹配引号内的所有文本,但是当切换到:

(?

我得到一个错误。不知道为什么。

我对正则表达式的了解限制了我。帮助将不胜感激。

【问题讨论】:

  • 更好地展示您的尝试以及这些尝试给您带来的结果。
  • @DontKnowMuchButGettingBetter 谢谢,刚刚添加了信息。
  • 不是java专业人士,像replaceAll("\" *([^\"]+)? *\"", "\"$1\"") 这样的东西有用吗?在 java 中是有效的正则表达式语法吗?
  • @PaulHodges 你可能想在中间使用+? 而不是+,因为空格不是引号,否则会被贪婪地匹配。

标签: java regex replaceall


【解决方案1】:

不使用(仅)正则表达式更容易。

用引号分割字符串(-1 保留任何尾随的空白部分):

String[] parts = str.split("\"", -1);

修剪奇数元素:

for (int i = 1; i < parts.length; i += 2) {
  parts[i] = parts[i].trim();
}

再次加入零件:

String newStr = String.join("\"", parts);

【讨论】:

  • 这确实有帮助。您知道与正则表达式相比,它是否还具有时间/资源效率?只是一般的好奇心,并不是真正的要求。
  • 它将具有...不同的效率。很难说。正则表达式通常效率很低。您可以使用 StringBuilder 更有效地完成此操作,避免创建中间字符串。