我在Scala中有这个列表:
List[String] = List([[aaa|bbb]], [[ccc|ddd]], [[ooo|sss]])
我希望获得与|之间的子串相同的List并删除和|也被删除了。
结果将是:
List[String] = List([[aaa]], [[ccc]], [[ooo]])
我尝试用List创建一个String并使用replaceAll,但我想保存List。
感谢。
答案 0 :(得分:5)
这是一个性能非常好的简单解决方案:
val list = List("[[aaa|bbb]]", "[[ccc|ddd]]", "[[ooo|sss]]")
list.map(str => str.takeWhile(_ != '|') + "]]" )
它假定字符串的格式为:
[
,|
。 答案 1 :(得分:3)
您可以使用简单的\|.*?]]
正则表达式匹配您需要删除的这些子字符串。
以下是一种在Scala代码中执行替换的方法:
val l = List[String]("[[aaa|bbb]]", "[[ccc|ddd]]", "[[ooo|sss]]")
println(l.map(x => x.replaceAll("""\|.*?(]])""", "$1")))
请参阅Scala demo
我在]]
周围添加了一个捕获组,并在替换模式中使用$1
反向引用将]]
插回到结果中。
<强>详情:
\|
- 文字|
pi [e符号(因为它是字符类的特殊字符,必须转义).*?
- 除换行符号以外的任何零个或多个符号(]])
- 第1组捕获]]
子字符串(请注意,字符类之外的]
不需要转义,这与|
的情况正好相反)。 答案 2 :(得分:0)
将|
和}
之间的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]])