2017-02-01 35 views
1

我想縮進在Groovy多行字符串,但我無法找出正確的正則表達式語法/或正則表達式標誌來實現這一目標。縮進多行字符串使用Groovy onliner

這裏是我試過到目前爲止:

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

預期由於某種原因,這些沒有工作。

奏效所以唯一的一點是此塊:

def indented = "" 
s.eachLine { 
    indented = indented + "  " + it + "\n" 
} 
println indented 

有縮進Groovy中的字符串的所有行較短/更有效的方式?

回答

0

你可以分裂和加入 - 不知道它的效率更高,但更短的

def s="""This 
is 
multiline 
""" 
def indent = "  " 
println indent + s.split("\\n").join("\n" + indent); 
0

也許只使用從Java的替代功能,該功能非正則表達式,並可能更快:

def s="""\ 
This 
is 
multiline 
""" 

println ' ' + s.replace('\n', '\n ') 

其打印:

This 
    is 
    multiline 

注:對於那些誰夠挑剔,更換使用java實現正則表達式(如Pattern),但LITERAL正則表達式,這意味着它會不顧一切正常的正則表達式逃逸等,所以上面的很可能還是比拆分爲大串快,但是這會使你希望他們有在那裏留下了一些功能,只是進行了替換,而沒有涉及潛在緩慢的模式實施。

1

你需要把(?m)指令裏面的正則表達式;而模式是slashy字符串,而不是一個單引號字符裏面斜線:

s.replaceAll(/(?m)^/, " ") 
相關問題