scala正则表达式用双引号的字符串

时间:2012-11-27 23:52:22

标签: regex scala replace

我正在努力使用scala中的正则表达式将带有两个文本的消息连接成单个文本

original message = "part1 "+" part2"
original message = "part1 "   + " part2"
original message = "part 1 "+    " part2"

concatenated message = "part1 part2"

我正在使用的是下面的代码(用至少替换为+的符号)

val line:String = """"text1"+"text2"""" //My original String which is "text1"+"text2"
val temp_line:String = line.replaceAll("\\+","")
println(temp_line)

它工作正常,结果“text1”“text2”。有没有办法使用正则表达式输出“text1 text2”?

请帮忙。提前致谢

1 个答案:

答案 0 :(得分:1)

这对于正则表达式来说真的不是一个理想的问题,但没关系:

val Part = """"([^"]*)"(.*$)""".r    // Quotes, non quotes, quotes, then the rest
val Plus = """\s*\+\s*(.*)""".r      // Plus with optional spaces, then the rest

def parts(s: String, found: List[String] = Nil): String = s match {
  case Part(p,rest) => rest match {
    case "" => (p :: found).map(_.filter(c => !c.isWhitespace)).reverse.mkString(" ")
    case Plus(more) => parts(more, p :: found)
    case x => throw new IllegalArgumentException(s"$p :$x:")
  }
  case x => throw new IllegalArgumentException(s"|$x|")
}

这只是将输入字符串逐个分开;如果你想看看它是如何工作的,你可以添加printlns。 (请注意,+是正则表达式中的特殊字符,因此您需要将其转义以匹配它。)

scala> parts(""""part1 "+" part2"""")
res1: String = part1 part2

scala> parts(""""part1 "   + " part2"""")
res2: String = part1 part2

scala> parts(""""part 1 "+    " part2"""")
res3: String = part1 part2