使用 Groovy onliner 缩进多行字符串

pag*_*gid 5 groovy

我想在 Groovy 中缩进多行字符串,但我无法找出正确的 RegEx 语法/或 Regex 标志来实现这一点。

到目前为止,这是我尝试过的:

def s="""This
is
multiline
"""
println s.replaceAll('/(.*)/',"      \1")
println s.replaceAll('/^/',"     ")
println s.replaceAll('(?m)/^/',"      \1")
println s.replaceAll('(?m)/(.*)/',"      \1")
Run Code Online (Sandbox Code Playgroud)

由于某种原因,这些没有按预期工作。

唯一有效的是这个块:

def indented = ""
s.eachLine {
  indented = indented + "      " +  it + "\n"
}
println indented
Run Code Online (Sandbox Code Playgroud)

有没有更短/更有效的方法来缩进 Groovy 中字符串的所有行?

gle*_*man 5

您需要将(?m)指令放在正则表达式中;并且模式是斜杠字符串,而不是内部带有斜杠的单引号字符串:

s.replaceAll(/(?m)^/, "    ")
Run Code Online (Sandbox Code Playgroud)


chr*_*con 2

你可以拆分和加入 - 不知道它是否更有效,但更短

def s="""This
is
multiline
"""
def indent = "      "
println indent + s.split("\\n").join("\n" + indent);
Run Code Online (Sandbox Code Playgroud)