仅在特定位置替换Java String中的引号

时间:2017-07-10 07:30:20

标签: java regex

我们有一个字符串如下。

\config\test\[name="sample"]\identifier["2"]\age["3"]

我需要删除数字周围的引号。例如,替换后的上述字符串应如下所示。

\config\test\[name="sample"]\identifier[2]\age[3]

目前我正在尝试使用正则表达式,如下所示

String.replaceAll("\"\\\\d\"", "");

这也正在取代这些数字。请帮助找出这方面的正则表达式。

3 个答案:

答案 0 :(得分:1)

您可以将replaceAll与此正则表达式\"(\d+)\"一起使用,以便将\"(\d+)\"的匹配项替换为捕获组(\d+)

String str = "\\config\\test\\[name=\"sample\"]\\identifier[\"2\"]\\age[\"3\"]";
str = str.replaceAll("\"(\\d+)\"", "$1");
//----------------------^____^------^^

输出

\config\test\[name="sample"]\identifier[2]\age[3]

regex demo

查看Capturing Groups

答案 1 :(得分:1)

我们可以尝试全面替换以下模式:

\["(\d+)"\]

用这个替换它:

\[$1\]

请注意,我们专门针对仅出现在方括号中的引用数字。这样可以最大限度地降低意外更换的风险。

<强>代码:

String input = "\\config\\test\\[name=\"sample\"]\\identifier[\"2\"]\\age[\"3\"]";
input = input.replaceAll("\\[\"(\\d+)\"\\]", "[$1]");
System.out.println(input);

<强>输出:

\config\test\[name="sample"]\identifier[2]\age[3]

在这里演示:

Rextester

答案 2 :(得分:0)

您可以使用:

(?:"(?=\d)|(?<=\d)")  

并将其替换为无==(""

快速测试:

echo '\config\test\[name="sample"]\identifier["2"]\age["3"]' | perl -lpe 's/(?:"(?=\d)|(?<=\d)")//g' 

输出:

\config\test\[name="sample"]\identifier[2]\age[3] 

TEST2:

echo 'identifier["123"]\age["456"]' | perl -lpe 's/(?:"(?=\d)|(?<=\d)")//g' 

输出:

identifier[123]\age[456]

注意

如果你只有一个双引号"它可以正常工作;否则你应该为开始和结束+

添加量词"

test3:

echo '"""""1234234"""""' | perl -lpe 's/(?:"+(?=\d)|(?<=\d)"+)//g'

输出:

1234234