我正在努力使用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”?
请帮忙。提前致谢
答案 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