0

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

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

concatenated message = "part1 part2"

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

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”?

请帮忙。提前致谢

4

1 回答 1

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
于 2012-11-28T18:16:56.617 回答