0

私はscalaで正規表現を使用して2つのテキストを含むメッセージを1つのテキストに連結するのに苦労しています

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」になります。正規表現を使用して出力「text1text2」を取得する方法はありますか?

助けてください。前もって感謝します

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|")
}

これは、入力文字列を1つずつ分解するだけです。それがどのように機能するかを見たい場合は、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 に答える