在此字符串替换字符串:含括号
val s = "pow(10,3) + pow(10,3) + pow(10,3)"
我需要
1000
更换
pow(10,3)
因此,最终结果将是
1000 + 1000 + 1000
我
s.replaceAll("pow(10,3)", "1000")
试图然而,这并不工作作为第一个参数是一个正则表达式,并且圆括号表示一组。上述声明实际上并不取代任何内容。有任何想法吗?
在此字符串替换字符串:含括号
val s = "pow(10,3) + pow(10,3) + pow(10,3)"
我需要
1000
更换
pow(10,3)
因此,最终结果将是
1000 + 1000 + 1000
我
s.replaceAll("pow(10,3)", "1000")
试图然而,这并不工作作为第一个参数是一个正则表达式,并且圆括号表示一组。上述声明实际上并不取代任何内容。有任何想法吗?
要替换文本字符串,不要使用replaceAll
,使用replace
。
val s = "pow(10,3) + pow(10,3) + pow(10,3)";
print(s.replace("pow(10,3)", "1000"));
// => 1000 + 1000 + 1000
如果您需要使用replaceAll
,字面括号必须用加倍反斜线:
s.replaceAll("pow\\(10,3\\)", "1000")
或者,使用三引号字符串字面量和使用一个反斜杠来逃避特殊的正则表达式元字符:
s.replaceAll("""pow\(10,3\)""", "1000")
见this Scala demo和another one here。
两个replaceAll
和replace
将取代多个出现。
旁replace
,你可以使用replaceAllLiterally(literal: String, replacement: String): String
参见Is there ever a reason to use Scala's StringLike.replaceAllLiterally over Java's String.replace?
只是出于好奇,我不明白为什么你需要双向反斜杠括号,这是一个斯卡拉的事情? – EndermanAPM
好吧,你不*必须*必须。如果你使用三重引号字符串,你可以使用单个反斜杠 - ['s.replaceAll(“”“pow \(10,3 \)”“”,“1000”)'](https:// ideone。 COM/qz42xk)。重点是双引号字符串文字可以具有像\ n这样的转义序列,所以反斜线写为“\\”',我们需要一个* literal *反斜线来转义正则表达式元字符。 –
你需要逃避(
和)
与\
否则就会被视为组
var re = /pow\(10,3\)/g;
var str = 'pow(10,3) + pow(10,3) + pow(10,3)';
var subst = '1000';
var result = str.replace(re, subst);
console.log(result);
你需要加倍逃避支架为:str.replaceAll("pow\\(10,3\\)", "1000"))
我需要用scala做到这一点,而不是javascript – ps0604
你可以用反斜杠转义括号,这样他们就像另一个字符一样对待ter:
"""pow\(10,3\)"""
是这个scala或javascript? – ps0604
这是一个正则表达式,在你的代码中它看起来像:'s.replaceAll(“pow \(10,3 \)”,“1000”)' – EndermanAPM
如何转换字符串'pow(10,3)'到'pow \(10,3 \)'斯卡拉? – ps0604
尝试replaceAllLiterally
,它接受String literal
作为输入。
val str = "pow(10,3) + pow(10,3) + pow(10,3)";
println(str.replaceAllLiterally("pow(10,3)", "1000"));
用途:POW \\(10,3 \\),因为括号是用于尝试组 –
's.replace(“POW( 10,3)“,”1000“)'? –
@WiktorStribiżew是不是字符串只替换字符? – ps0604