【发布时间】:2019-03-15 11:43:40
【问题描述】:
我对正则表达式相对较新,虽然我知道 Scala 有一种在第一次出现之前使用替换项目的方法,但我想知道是否有办法在 Scala 中第一次出现后删除字符串中的项目。
例如如果我有一个类似的字符串
"Hello. W.o.r.l.d"
这样它就类似于
"Hello. World"
谢谢。
【问题讨论】:
我对正则表达式相对较新,虽然我知道 Scala 有一种在第一次出现之前使用替换项目的方法,但我想知道是否有办法在 Scala 中第一次出现后删除字符串中的项目。
例如如果我有一个类似的字符串
"Hello. W.o.r.l.d"
这样它就类似于
"Hello. World"
谢谢。
【问题讨论】:
不需要花哨的正则表达式。只需split() 然后重新连接。
val noDots = "Hello. W.o.r.l.d".split("\\.")
val res = noDots.head + "." + noDots.tail.mkString //res: String = Hello. World
如果文本中只有一个.,这将正常工作,但如果没有.,则会在字符串末尾插入一个。
【讨论】:
这是一种混合使用Regex 模式匹配和replace 的方法:
val s = "Hello. W.o.r.l.d"
val pattern = """(.*?\.)(.*)""".r
s match {
case pattern(a, b) => a + b.replace(".", "")
case others => others
}
// res1: String = Hello. World
注意,如果字符串中没有.,则匹配case others。
【讨论】:
您也可以尝试使用 indexOf 和子字符串组合
scala> val x = "Hello. W.o.r.l.d"
x: String = Hello. W.o.r.l.d
scala> x.substring(0,x.indexOf(".")+1) + x.split("\\.").tail.mkString
res21: String = Hello. World
scala>
【讨论】: