に2つの特定の文字の間に部分文字列を削除するにはどのように私はScalaでこのリストを持っていますと]を取り除いて|削除されました。Scalaの
だから、結果は次のようになります。
List[String] = List([[aaa]], [[ccc]], [[ooo]])
私は何か一覧で列を作り、でReplaceAllを使用してみましたが、私はリストを節約したいです。
ありがとうございました。
に2つの特定の文字の間に部分文字列を削除するにはどのように私はScalaでこのリストを持っていますと]を取り除いて|削除されました。Scalaの
だから、結果は次のようになります。
List[String] = List([[aaa]], [[ccc]], [[ooo]])
私は何か一覧で列を作り、でReplaceAllを使用してみましたが、私はリストを節約したいです。
ありがとうございました。
正規表現\|.*?]]
を使用すると、削除する必要がある部分文字列を一致させることができます。ここ
はScalaのコードに置換を実行するための方法である:
val l = List[String]("[[aaa|bbb]]", "[[ccc|ddd]]", "[[ooo|sss]]")
println(l.map(x => x.replaceAll("""\|.*?(]])""", "$1")))
を見るIは]]
周りキャプチャグループを追加し、]]
を挿入する置換パターンに$1
後方参照を使用しました結果に戻る。
詳細:
\|
- リテラル|
PI [Eシンボル(それは文字クラスのoutide特殊文字であるため、それはエスケープされなければならない).*?
- 任意ゼロ以上改行記号以外の記号(]])
- グループ1キャプチャ]]
部分文字列(文字クラス外の]
はエスケープする必要はありません。ケースの反対側の|
)。]
と|
と}
間の3つの文字を置き換えます。
正規表現はここ"\\|(.{3})\\]"
(|
と}
をエスケープすることを忘れないでください)
scala> val list = List("[[aaa|bbb]]", "[[ccc|ddd]]", "[[ooo|sss]]")
list: List[String] = List([[aaa|bbb]], [[ccc|ddd]], [[ooo|sss]])
scala> list.map(_.replaceAll("\\|(.{3})\\]", "]"))
res16: List[String] = List([[aaa]], [[ccc]], [[ooo]])
でのパフォーマンスにはかなり良いことがありますシンプルなソリューションです:
val list = List("[[aaa|bbb]]", "[[ccc|ddd]]", "[[ooo|sss]]")
list.map(str => str.takeWhile(_ != '|') + "]]")
それはの形式ことを前提としてい文字列は次のとおりです。
|
を入力します。
ありがとうございました! – KonaKona
replaceAll( "" \ | [^ \]] + "" "、" ")'の場合、キャプチャグループは必要ありません。また、 '[]'のネストレベルが変更されても正確です。 – jwvh
@jwvh: ']]'と置き換えることができます。正規表現ができることを示す方法です。 –