2017-01-01 61 views
0

我想解析並清理一些格式不當的日誌,這些日誌通常有多餘的空格。所以基本上我想用一個空間替換多個空間。但是,在引號內出現的情況下,額外的空格不是無關的,我不想替換它們。我發現了大量的資源,討論用一個替換多個空間,但得到否定,在引號內部不要這樣做,這讓我感到悲傷。我真的很想知道爲什麼RegEx邏輯會讓我頭腦發熱。用一個替換多個空格;當不用引號括起來

編輯:實例

Jrn.Size  0 , 3317 , 1549 

變得

Jrn.Size 0 , 3317 , 1549 

Jrn.Directive "GlobalToProj" , "[File Name.rvt]" 

變得

Jrn.Directive "GlobalToProj" , "[File Name.rvt]" 

"GlobalToProj"後的多餘空格被替換,但"[File Name.rvt]"中的多餘空格不是。

+2

顯示輸入文字和預期outpu t以獲得快速幫助 – RomanPerekhrest

+1

並且請使用您正在使用的語言/框架/平臺標記問題 –

+0

針對這兩個意見進行修改。 – Gordon

回答

1

您可以使用this ingenious approach來測試是否匹配由奇數或偶數報價,以便確定我們是否是內部或引用一段文字外遵循:

PS C:\> 'Jrn.Directive "GlobalToProj" , "[File Name.rvt]"' -replace '\s+(?=([^"]*"[^"]*")*[^"]*$)',' ' 
Jrn.Directive "GlobalToProj" , "[File Name.rvt]" 

模式本身:向下

\s+(?=([^"]*"[^"]*")*[^"]*$) 

休息時間:

\s+   # one or more spaces followed by 
(?=   # positive lookahead group containing 
    (  # capture group containing 
    [^"]* # 0 or more non-doublequote characters 
    "  # 1 doublequote mark 
    [^"]* # 0 or more non-doublequote characters 
    "  # 1 doublequote mark 
)*  # group repeated 0 or more times 
    [^"]*  # 0 or more non-doublequote characters 
    $   # end of string 
)   
+0

哦,那只是壞蛋!我有一個新的,我想要做的事情,當涉及到RegEx時,這個細分可能最終讓我通過我的理解塊。 – Gordon

相關問題