我们有一个字符串如下。
\config\test\[name="sample"]\identifier["2"]\age["3"]
我需要删除数字周围的引号。例如,替换后的上述字符串应如下所示。
\config\test\[name="sample"]\identifier[2]\age[3]
目前我正在尝试使用正则表达式,如下所示
String.replaceAll("\"\\\\d\"", "");
这也正在取代这些数字。请帮助找出这方面的正则表达式。
答案 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]
答案 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]
在这里演示:
答案 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