刪除兩個特定字符之間的子字符串我有這個名單中斯卡拉:如何在斯卡拉
List[String] = List([[aaa|bbb]], [[ccc|ddd]], [[ooo|sss]])
而且我想獲得與之間的子同一個列表|和]刪除和|也刪除了。
那麼結果將是:
List[String] = List([[aaa]], [[ccc]], [[ooo]])
我試圖做的東西與列表和使用的replaceAll字符串,但我想以節省名單。
謝謝。
刪除兩個特定字符之間的子字符串我有這個名單中斯卡拉:如何在斯卡拉
List[String] = List([[aaa|bbb]], [[ccc|ddd]], [[ooo|sss]])
而且我想獲得與之間的子同一個列表|和]刪除和|也刪除了。
那麼結果將是:
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")))
我添加捕獲組圍繞]]
並且在替換模式中使用的$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:我知道我可以用']]來替換。這只是一種顯示正則表達式可以做什麼的方法。 –