Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java正则表达式从字符串中删除不需要的字符,双引号中的字符除外_Java_Regex_Regex Greedy - Fatal编程技术网

Java正则表达式从字符串中删除不需要的字符,双引号中的字符除外

Java正则表达式从字符串中删除不需要的字符,双引号中的字符除外,java,regex,regex-greedy,Java,Regex,Regex Greedy,我们有一个JAVA字符串作为 String str = "WHERE geoAreaName=\"Barcelona (Spain) EUR\" AND (startDate=\"2019-01-01\" AND endDate=\"2020-01-01\")"; 我们需要从中删除像[,],(,),{,}这样的字符 标识相同的正则表达式模式是:[\\[\\](){}] 因此,在执行以下代码时,输出为: System.out.println(str.replaceAll("[\\[\\](){

我们有一个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"
这很好,只是我们需要保持数据在双引号中的完整性

巴塞罗那(西班牙)欧元
需要保持完整,不得转换为
巴塞罗那西班牙欧元

预期产出为:

WHERE geoAreaName="Barcelona (Spain) EUR" AND startDate="2019-01-01" AND endDate="2020-01-01"
简而言之,我需要一个正则表达式来识别给定字符串中的字符,除了引号中的部分


非常感谢您的帮助。

我不知道您为什么要删除字符串文本之外的
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')

出于好奇,为什么要用正则表达式编辑java代码中的SQL字符串?为什么要删除括号字符?这听起来像是一个例子。实际上,我使用SQL示例只是为了更好地解释这个问题。这个问题是在正则表达式域中,我要找的是一个正则表达式,它将识别并替换给定字符串中的字符,除了引号中的部分。您可能还想看一看可能的重复项,也许也是事实上我使用SQL示例只是为了更好地解释这个问题。这个问题在正则表达式域中,我要找的是
一个正则表达式,它将识别并替换给定字符串中的字符,但引号中的部分除外。
即使我们使用您的解决方案,括号仍然在那里。@hemantvsn要处理您的需求,在一般情况下,您需要编写一个SQL解析器,不仅仅是一个正则表达式。