我很難搞清楚如何用''
替代每個空白區域,免除" "
之間的差距。正則表達式 - 替換特定的字符exept特定的字符串
例如 -
a = c + d;
是
a=c+d
和
foo ("hi bye", "bye hi");
是
foo("hi bye","bye hi");
我曾嘗試類似
re.sub('^(\"[^\"\n]*\")|\s|\\n', '', line)
但顯然不起作用。
我很難搞清楚如何用''
替代每個空白區域,免除" "
之間的差距。正則表達式 - 替換特定的字符exept特定的字符串
例如 -
a = c + d;
是
a=c+d
和
foo ("hi bye", "bye hi");
是
foo("hi bye","bye hi");
我曾嘗試類似
re.sub('^(\"[^\"\n]*\")|\s|\\n', '', line)
但顯然不起作用。
查找:
r'(".*?")|(\s+)'
替換:
r'\1'
的想法是忽略引號中的所有字符,通過先用東西在裏面(".*?"
)匹配所有的報價,並與更換相同(\1
)。
我們知道剩下的空格(\s+
)不會在引號內(或者第一個規則會與它們匹配),並用空白替換這些空格。
'g'應該被刪除。 –
@WiktorStribiżew,完成。 :) – ndn
我試過're.sub('r「(\」。*?\「)|(+)」g','$ 1',line)'on line = \t let length = Keyboard.readInt(「多少數字?」);',但那沒有做任何事情。 '讓$ 1length $ 1 = $ 1Keyboard.readInt($ 1);' –
既然你在你的評論認爲,正則表達式是不需要說了,我要提出一個新的概念:不使用正則表達式。
不要誤解我的意思。我喜歡正則表達式。這是一個了不起的強大工具,如果你願意做出足夠複雜的表達,它幾乎可以處理任何你想要的東西。有時候,正則表達式是完美的工具,可以用一個簡單的表達式清理幾十行代碼。
但是,這是一個簡單的任務,依賴於一件簡單的事情:您需要一個狀態是否在報價中。
這段代碼是如此基本的人甚至可以說它不是pythonic。但它有效,任何人都可以閱讀。
def kill_spaces(test_str):
inside_quote = False
result = ""
for character in test_str:
if character != " " or inside_quote:
result += character
if character == '"':
inside_quote = not inside_quote
return result
test = 'foo ("hi bye", "bye hi");'
kill_spaces(test)
>>> 'foo("hi bye","bye hi");'
我覺得有一個更pythonic這樣做的方式(除正則表達式),但無法弄清楚。我接受建議。 –
是否有任何嵌套引用的子字符串,你需要考慮?我懷疑''''裏面也可以使用雙引號,對吧? –
@michal你知道https://regex101.com/,包含python解釋器 –
你的要求是你必須使用正則表達式嗎? –