如何在Scala中从字符串中除去除数字以外的所有内容(快速一行)
这让我快发疯了。。。必须有一种方法可以去除字符串中的所有非数字字符(或执行其他简单过滤) 示例:我想将电话号码(“+72(93)2342-7772”或“+1310-777-2341”)转换为简单的数字字符串(而不是Int),例如“72932342772”或“13107772341” 我尝试了如何在Scala中从字符串中除去除数字以外的所有内容(快速一行),scala,filter,Scala,Filter,这让我快发疯了。。。必须有一种方法可以去除字符串中的所有非数字字符(或执行其他简单过滤) 示例:我想将电话号码(“+72(93)2342-7772”或“+1310-777-2341”)转换为简单的数字字符串(而不是Int),例如“72932342772”或“13107772341” 我尝试了“[\\d]+”.r.findAllIn(phoneNumber),它返回一个Iteratee,然后我不得不以某种方式将它们重新组合成一个字符串。。。看起来浪费得可怕 我还提出了:phoneNumber.fi
“[\\d]+”.r.findAllIn(phoneNumber)
,它返回一个Iteratee,然后我不得不以某种方式将它们重新组合成一个字符串。。。看起来浪费得可怕
我还提出了:phoneNumber.filter(“0123456789.contains()))
但对于其他情况来说,这会变得单调乏味。例如,删除所有标点符号。。。我真的想要一种能与正则表达式一起工作的东西,所以它的应用范围比过滤掉数字更广
任何人对此都有更直接的Scala单行程序吗?您可以使用
过滤器
,将字符串视为字符序列,并使用isDigit
测试字符:
"+72 (93) 2342-7772".filter(_.isDigit) // res0: String = 729323427772
您可以使用
replaceAll
和Regex
“+72(93)2342-7772”.replaceAll([^0-9]”,“”)//res1:String=72932342772
另一种方法,在本例中定义有效字符的集合
val d = '0' to '9'
因此,对于val a=“+72(93)2342-7772”
,在集合包含时进行过滤,例如使用以下任一项
for (c <- a if d.contains(c)) yield c
a.filter(d.contains)
a.collect{ case c if d.contains(c) => c }
(c)的
请注意,您也可以使用\D
而不是[^0-9]
。可能应该像电影中那样使用“555”。谢谢……简单的回答……但是,由于我特别寻找正则表达式解决方案,我接受了@Spork–谢谢!