【问题标题】:Java Regex To Remove unwanted characters from String except for characters in double quotesJava 正则表达式从字符串中删除不需要的字符,双引号中的字符除外
【发布时间】:2019-09-28 09:09:57
【问题描述】:

我们有一个 JAVA 字符串作为

String str = "WHERE geoAreaName=\"Barcelona (Spain) EUR\" AND (startDate=\"2019-01-01\" AND  endDate=\"2020-01-01\")";

我们需要从中删除像[ , ], ( , ), { , } 这样的字符。

识别相同的正则表达式模式是:[\\[\\](){}]

所以在执行下面的代码时,输​​出是:

System.out.println(str.replaceAll("[\\[\\](){}]" , ""));

>>> WHERE geoAreaName="Barcelona Spain EUR" AND startDate="2019-01-01" AND endDate="2020-01-01"

这很好用,只是我们需要保持双引号括起来的数据完整。

Barcelona (Spain) EUR需要保持原样,不能转换成Barcelona Spain EUR

预期的输出是:

WHERE geoAreaName="Barcelona (Spain) EUR" AND startDate="2019-01-01" AND endDate="2020-01-01"

所以简而言之,我需要一个正则表达式来识别给定字符串中的字符,但引号中的部分除外。

感谢任何帮助。

【问题讨论】:

标签: java regex regex-greedy


【解决方案1】:

我不知道您为什么要从字符串文字之外的 WHERE 子句中删除括号。它们是多余的,但它们在那里并没有错。但是,您还有另一个问题,即您在应该使用单引号时对字符串和日期文字使用双引号。所以我实际上建议以下替换:

String where = "WHERE geoAreaName=\"Barcelona (Spain) EUR\" AND (startDate=\"2019-01-01\" AND  endDate=\"2020-01-01\")";
where = where.replaceAll("\"", "'");

生成的WHERE 子句完全有效,应该按预期运行:

WHERE
    geoAreaName = 'Barcelona (Spain) EUR' AND
    (startDate = '2019-01-01' AND  endDate = '2020-01-01')

【讨论】:

  • 实际上我使用 SQL 示例只是为了更好地解释问题。这个问题在正则表达式域中,我正在寻找的是 a regex which will identify and replace the characters in given string except for the parts which are in quotes. 即使我们采用您的解决方案,括号仍然存在。
  • @hemantvsn 要在一般情况下处理您的需求,您需要编写一个 SQL 解析器,而不仅仅是一个正则表达式。
猜你喜欢
  • 2018-03-06
  • 1970-01-01
  • 1970-01-01
  • 2021-06-14
  • 1970-01-01
  • 1970-01-01
  • 2018-01-28
  • 2011-06-13
  • 1970-01-01
相关资源
最近更新 更多