简体   繁体   中英

Replacing quotes in a Java String only on specific places

We have a String as below.

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

I need to remove the quotes surrounding the numbers. For example, the above string after replacement should look like below.

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

Currently I'm trying with the regex as below

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

This is replacing the numbers also. Please help to find out a regex for this.

You can use replaceAll with this regex \\"(\\d+)\\" so you can replace the matching of \\"(\\d+)\\" with the capturing group (\\d+) :

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

Output

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

regex demo


Take a look about Capturing Groups

We can try doing a blanket replacement of the following pattern:

\["(\d+)"\]

And replacing it with this:

\[$1\]

Note that we specifically target quoted numbers only appearing in square brackets. This minimizes the risk of accidentally doing an unintended replacement.

Code:

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

Output:

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

Demo here:

Rextester

You can use:

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

and replace it with nothing == ( "" )

fast test:

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

the output:

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

test2:

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

the output:

identifier[123]\age[456]

NOTE

if you have only a single double quote " it works fine; otherwise you should add quantifier + for both beginning and end "

test3:

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

the output:

1234234

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM