2014-02-24 19 views
0

在Ruby中,如果你想替换多个!标记为单个!你可以这样做:scala与Ruby之类的正则表达式是否简洁?

text.gsub!(/!+/, '!') 

斯卡拉是否有一个简洁的方式做类似的事情?

+2

答案显示了一些近似方法。但是Scala对'正则表达式'文字没有直接的词汇支持。后缀'.r'几乎和我想的一样好,并且消除了词法分析器中的一些复杂性。 –

回答

4

是的,你可以简单地做:

text = text.replaceAll("!+", "!") 

注意,Scala的字符串是java.lang.String实例。

+0

假设我对文本变量执行10次这样的操作,是否有办法做到这一点,所以它不会每次都创建一个新的String变量? – loyalflow

+0

编号字符串是不可变的。 – joescii

+0

如果你只关心代码的长度,你可以链接它们:'text.replaceAll(“!+”,“!”)。replaceAll(“foo”,“bar”)'。 – ach

1

如果你真的想使用正则表达式,这是不行的。斯卡拉的.rString变成Regex

scala> val s = "This is exciting!!!" 
s: String = This is exciting!!! 

scala> "!+".r.replaceAllIn(s, "!") 
res14: String = This is exciting! 
0

在思考这个问题,认为这将有可能创建一个斯卡拉2.10+串插在一定程度上简化相对于当前.r法正则表达式实例的创建。一旦它发生在我身上,我觉得有人必须已经给了这个尝试,而事实上他们已经。

检查出来:Scala Regex StringContext

+0

我敢肯定还有其他的进化的例子,但https://github.com/som-snytt/regextractor –

+0

@ som- snytt:不像Googleable的qubub的repo ... –