2017-01-09 26 views
1

我正在尋找無處不在,但找不到答案。我需要一個正則表達式來刪除字符串中的所有空格,但只保留""中的空格。 例如:$F:2 $PX:30 $PY:980 $T: " "$F:A $PX:30B $PY:9K80 $T: " "所以到底應該看起來像$F:2$PX:30$PY:980$T:" "正則表達式去除whitepsace,除非它在裏面「」

這將是寶貴的解釋如何閱讀你回答的正則表達式。

+0

老實說,這不是一個很難解決的問題,只需迭代字符並跟蹤打開和關閉雙引號而不是使用正則表達式即可。 – juharr

+0

您提供了很少的示例。能否出現除空格之外的任何引號,例如'「a b c」'... [見本演示](https://regex101.com/r/XtILna/1)。爲了更好的理解,還請顯示您已經嘗試過的內容。 –

回答

1

這將匹配正在觸摸"但尚未被它們包圍的空白。

" +(?!\")|(?<!\") +" 

而對於所有空白:

"\s+(?!\")|(?<!\")\s+" 

您可以測試它Regex101Rextester

+0

可否請你稍作更新。 '$ F:2 $ PX:30 $ PY:980 $ T:「」$ F:2 $ PX:30 $ PY:980 $ T:「」'在這種情況下,正則表達式在關閉後沒有捕獲空間「你是否也能做到這一點?這不是一個錯誤,這樣的字符串是這樣的,就像2 in 1 –

+0

好的,問題是這樣的:我在第一個註釋中寫了第一個'$ T :「」它忽略了其餘部分,它只給出了字符串的一半,所以你可以找到一個解決方法來獲得這個@maksymiuk –

+0

我不明白..在這個例子中,它顯示它正在工作你想要的:https://regex101.com/r/4ggez2/1 – maksymiuk

1

匹配不preceeded也不後面引號的空間:

(?<!") (?!") 

匹配所有空白:

(?<!")\s+(?!") 

注:這可能無法在工作時間超過一個空間,由梅德指出。

+0

這會在引號中的3個連續空格上失敗,例如, ''「'。 –

+0

你可以修改它一下,只是忽略前面加引號的空格,並刪除後面加引號的空格,我需要找到這個'$ T:「」'而不只是'$ T:「 「'。希望你明白我想說什麼 –

+0

@arianitax,我的答案解決了這個問題,也允許多個空格 – maksymiuk