如何有效地从Scala的字符串中删除非单词字符?

时间:2018-11-05 10:05:55

标签: scala

我有一个字符串如下:

  

你好。我的邮政编码是9876543。另外,我的电子邮件ID是   myname@domain.com。

我想通过从字符串中删除非单词字符来清理此字符串,例如".", "@", numbers, ...

如何在Scala中实现它?在Scala中有一个内置的函数,我只列出不需要的字符,它将自动过滤字符串?

谢谢。

2 个答案:

答案 0 :(得分:1)

[感谢Dima指出使用*时不需要replaceAll]

简单的解决方法是

 str.replaceAll("\\W", "")

这会将所有出现的正则表达式替换为另一个字符串。单词字符的正则表达式为\w,非单词字符的正则表达式为\W,因此这将全部替换所有非单词字符。

如果您要进行更复杂的测试,请查看正则表达式的任何介绍,以了解如何执行此操作。

编辑

如果使用带重音符号的字符或其他字母的字符,请使用Unicode表达式。例如,要保留所有Unicode字母字符,请使用以下命令:

 str.replaceAll("\\P{L}", "")

例如,这将避免丢失托儿所的第一个e。

答案 1 :(得分:0)

假设您要保留字母和空格并过滤其他所有内容,在Scala中,您可以像这样简单:

"Hi there. My zip code is 9876543. Also my email-Id is myname@domain.com."
  .filter(c => c.isLetter || c.isWhitespace)
// > res: String = "Hi there My zip code is  Also my emailId is mynamedomaincom"

如果您的逻辑比我想象的还要复杂,请使用正则表达式。