【问题标题】:What is the regular expression to remove whitespace inside brackets?删除括号内空格的正则表达式是什么?
【发布时间】:2011-10-11 19:01:31
【问题描述】:

我正在用 Java 编写一个程序来接受查询。如果我有类似的查询

insert    
into  
abc      values   (    e   
, b    );

...我可以使用什么正则表达式将其转换为:

insert into abc values(e,b);

...或:

insert:into:abc:values(e,b);

实际上我想知道如何编写一个正则表达式来仅删除括号内的空格。

【问题讨论】:

  • 括号可以嵌套吗?如果是这样,你就完蛋了(Perl 向导可能会管理它,但结果不会很好或可维护,我不会打赌它可以移植到不太复杂的正则表达式引擎)。
  • 让我们保持简单。没有嵌套的括号。
  • 这并不能完全解决您的问题,因为您已经在上面得到了一些非常好的回应,但是,如果您曾经因为这样的事情而停滞不前,我发现网上有一些很棒的测试人员——我最常使用this one,因为它是实时的,并且在右侧有一个很好的参考表。

标签: java regex


【解决方案1】:

假设括号正确平衡,并且没有嵌套括号,以下将删除括号内的所有空格(并且仅存在):

String resultString = subjectString.replaceAll("\\s+(?=[^()]*\\))", "");

它会变形

insert    
into  
abc      values   (    e   
, b    );

进入

insert    
into  
abc      values   (e,b);

说明:

\s+      # Match whitespace
(?=      # only if followed by...
 [^()]*  # any number of characters except parentheses
 \)      # and a closing parenthesis
)        # End of lookahead assertion

【讨论】:

  • 完美的一个。非常感谢。我将再次使用 replaceAll("\\s+",":");获取结果并执行查询
【解决方案2】:

据我所知,您不需要 RegEx。这应该工作:

yourString.replaceAll("\n", " ").replaceAll("( ","(").replaceAll(" )",")").replaceAll(", ",",").replaceAll(" ,",",");

【讨论】:

  • 这不是解决方案。至于下面的字符串,它在 where (e, b) 中不起作用;可以包含多个空格。
  • 对于他发布的第一个字符串,我的解决方案有效。但他编辑了他的示例字符串。
猜你喜欢
  • 2020-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
相关资源
最近更新 更多