^(\s+)
僅從第一行刪除空格。如何從所有行刪除前面的空格?Python:使用正則表達式從所有行中刪除空格
回答
Python的正則表達式模塊不會默認爲multi-line ^
matching ,所以你需要明確指定該標誌。
r = re.compile(r"^\s+", re.MULTILINE)
r.sub("", "a\n b\n c") # "a\nb\nc"
# or without compiling (only possible for Python 2.7+ because the flags option
# didn't exist in earlier versions of re.sub)
re.sub(r"^\s+", "", "a\n b\n c", flags = re.MULTILINE)
# but mind that \s includes newlines:
r.sub("", "a\n\n\n\n b\n c") # "a\nb\nc"
它也可能包括標誌內嵌到模式:
re.sub(r"(?m)^\s+", "", "a\n b\n c")
更簡單的方法是避免正則表達式,因爲原來的問題很簡單:
content = 'a\n b\n\n c'
stripped_content = ''.join(line.lstrip(' \t') for line in content.splitlines(True))
# stripped_content == 'a\nb\n\nc'
'「^ \ s +」'也會刪除空行 – 2017-04-11 16:27:19
你可以嘗試strip()
,如果你想刪除正面和背面,或lstrip()
如果前
>>> s=" string with front spaces and back "
>>> s.strip()
'string with front spaces and back'
>>> s.lstrip()
'string with front spaces and back '
for line in open("file"):
print line.lstrip()
如果你真的想用正則表達式
>>> import re
>>> re.sub("^\s+","",s) # remove the front
'string with front spaces and back '
>>> re.sub("\s+\Z","",s)
' string with front spaces and back' #remove the back
nowhite = ''.join(mytext.split())
沒有空格會像你問的一樣(一切都放在一個單詞中)。更有用的通常是加入一切與' '
或'\n'
保持單獨的話。
你將不得不使用re.MULTILINE選項:
re.sub("(?m)^\s+", "", text)
的 「(m)爲」 部分允許多。
@AndiDog在他的(當前接受的)答案中承認它咀嚼連續的換行符。
下面是如何解決這個缺陷,這是由於\n
是兩個空格和一個行分隔符造成的。我們需要做的是重新構建一個只包含換行符以外的空白字符的類。
我們想要whitespace and not newline
,它不能直接表示在一個重新類。我們將其重寫爲not not (whitespace and not newline)
即not(not whitespace or not not newline
(謝謝,Augustus),即not(not whitespace or newline)
即[^\S\n]
re
表示法。
所以:
>>> re.sub(r"(?m)^[^\S\n]+", "", " a\n\n \n\n b\n c\nd e")
'a\n\n\n\nb\nc\nd e'
你實際上並不需要爲這個大部分時間正則表達式。如果你只希望多行刪除共同壓痕,嘗試textwrap
模塊:
>>> import textwrap
>>> messy_text = " grrr\n whitespace\n everywhere"
>>> print textwrap.dedent(messy_text)
grrr
whitespace
everywhere
注意,如果壓痕是不規則的,這將維持:
>>> very_messy_text = " grrr\n \twhitespace\n everywhere"
>>> print textwrap.dedent(very_messy_text)
grrr
whitespace
everywhere
- 1. 使用Python刪除所有行匹配正則表達式
- 2. 使用正則表達式從C#字符串中刪除所有空格
- 3. 刪除所有空格用Perl的正則表達式
- 4. ANT刪除空格正則表達式
- 5. 正則表達式刪除空格
- 6. 正則表達式刪除空格
- 7. Javascript正則表達式刪除空格
- 8. 正則表達式jquery刪除所有雙空格
- 9. 正則表達式從每一行開始刪除空格
- 10. 正則表達式+ Python - 刪除所有以*開頭的行
- 11. 正則表達式:刪除所有,但?
- 12. 刪除所有正則表達式
- 13. 使用正則表達式刪除PSPad中的空行/行
- 14. Python的正則表達式刪除Word用正則表達式
- 15. 正則表達式從文件名中刪除空格
- 16. Python:從正則表達式中排除空格
- 17. Python正則表達式在字符串前後刪除空格
- 18. 如何使用正則表達式刪除空格Notepad ++?
- 19. 在PHP中刪除空格和空白的正則表達式?
- 20. 使用正則表達式刪除任何空白或空格的行
- 21. 正則表達式來刪除所有空的HTML標籤
- 22. 正則表達式從段落中刪除所有數字
- 23. 從段落中刪除所有屬性的正則表達式
- 24. 正則表達式刪除空格和新行
- 25. 使用正則表達式和AltSearch刪除空行
- 26. 正則表達式除去括號之間的所有空格
- 27. Ruby正則表達式刪除空間
- 28. 在Python中使用正則表達式之前刪除所有內容
- 29. 使用正則表達式刪除所有報價
- 30. 使用javascript正則表達式刪除所有腳本
空格包括換行符,這意味着如果在多行字符串中使用它,則所有內容都將在一行中結束。向我們展示一些意見,以便我們幫助理解這個問題! – rdrey 2010-10-21 05:42:27
@rdrey:實際上,多行模式中的'^'與每個換行符後的*匹配,所以這不會成爲問題(除了「\ n \ n」)。看到我的答案。 – AndiDog 2010-10-21 05:47:33
感謝您的更正。每天學習新東西:D – rdrey 2010-10-21 05:53:33