Regex 使用Scala代码在每个大写单词(减去第一个)前添加空格

Regex 使用Scala代码在每个大写单词(减去第一个)前添加空格,regex,string,scala,string-matching,uppercase,Regex,String,Scala,String Matching,Uppercase,我是新来的Scala。。。到目前为止,我真的很喜欢。:) 现在我正在玩游戏,我很惊讶这是多么简单的开始 嗯。。。目前的问题是,我想让字符串更具可读性: UsersGroupedByRegistrationMonthYear.csv 输出应为: Users Grouped By Registration Month Year.csv 你能帮忙吗?你可以用这个正则表达式搜索2个捕获组: ([a-z0-9])([A-Z]) 并使用此模式替换: $1 $2 代码: repl = input.r

我是新来的
Scala
。。。到目前为止,我真的很喜欢。:)

现在我正在玩游戏,我很惊讶这是多么简单的开始

嗯。。。目前的问题是,我想让字符串更具可读性:

UsersGroupedByRegistrationMonthYear.csv
输出应为:

Users Grouped By Registration Month Year.csv

你能帮忙吗?

你可以用这个正则表达式搜索2个捕获组:

([a-z0-9])([A-Z])
并使用此模式替换:

$1 $2

代码:

repl = input.replaceAll("([a-z0-9])([A-Z])", "$1 $2");

您可以使用此正则表达式搜索2个捕获组:

([a-z0-9])([A-Z])
并使用此模式替换:

$1 $2

代码:

repl = input.replaceAll("([a-z0-9])([A-Z])", "$1 $2");

不是正则表达式,而是一种非常直接的方法

val str = "UsersGroupedByRegistrationMonthYear.csv"
str.flatMap(c => if (c.isUpper) Seq(' ', c) else Seq(c)).trim

不是正则表达式,而是一种非常直接的方法

val str = "UsersGroupedByRegistrationMonthYear.csv"
str.flatMap(c => if (c.isUpper) Seq(' ', c) else Seq(c)).trim

一种替代方法是使用String.split和regex lookarounds以大写字母标记字符串,而不丢弃它们,然后将标记组合回一个字符串中,标记之间留有空格:

val in = "UsersGroupedByRegistrationMonthYear.csv"
val out = in.split("(?=[A-Z])").mkString(" ")

println("\"%s\"\nbecomes\n\"%s\"".format(in, out))
这将产生:

"UsersGroupedByRegistrationMonthYear.csv"
becomes
"Users Grouped By Registration Month Year.csv"

一种替代方法是使用String.split和regex lookarounds以大写字母标记字符串,而不丢弃它们,然后将标记组合回一个字符串中,标记之间留有空格:

val in = "UsersGroupedByRegistrationMonthYear.csv"
val out = in.split("(?=[A-Z])").mkString(" ")

println("\"%s\"\nbecomes\n\"%s\"".format(in, out))
这将产生:

"UsersGroupedByRegistrationMonthYear.csv"
becomes
"Users Grouped By Registration Month Year.csv"