删除两个特定字符之间的子字符串我有这个名单中斯卡拉:如何在斯卡拉
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:我知道我可以用']]来替换。这只是一种显示正则表达式可以做什么的方法。 –