^(\s+)
sadece boşlukları ilk satırdan kaldırır. Tüm boşluklardan ön boşlukları nasıl kaldırabilirim?Python: Beyaz boşluğu tüm satırlardan kaldırmak için düzenli ifadeyi kullanın
strip()
deneyebilirsiniz
^(\s+)
sadece boşlukları ilk satırdan kaldırır. Tüm boşluklardan ön boşlukları nasıl kaldırabilirim?Python: Beyaz boşluğu tüm satırlardan kaldırmak için düzenli ifadeyi kullanın
strip()
deneyebilirsiniz
Python'un regex modülü multi-line ^
matching varsayılan olarak değil kullanmak istiyorsanız bu yüzden bu bayrağı açıkça belirtmelisiniz. Orijinal sorun çok basittir çünkü
re.sub(r"(?m)^\s+", "", "a\n b\n c")
daha kolay bir çözüm düzenli ifadeler kaçınmaktır:
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"
O desenine bayrak inline dahil etmek mümkündür
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'
'^^+' 'ayrıca boş satırları kaldırır –
veya lstrip()
eğer ön
>>> 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()
gerçekten Regex
>>> 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())
Herhangi bir boşluk, istediğiniz gibi olmayacaktır (her şey tek kelimedir). Daha yararlı olağan, kelimeleri ayrı tutmak için ' '
veya '\n'
ile her şeye katılmanızdır.
Sen re.MULTILINE seçeneği kullanmak gerekecek:
re.sub("(?m)^\s+", "", text)
"(? M)" kısmı satırlı sağlar.
@AndiDog, (şu anda kabul edilen) yanıtında ardışık yeni satırlar bulunduğunu kabul eder.
\n
BOTH beyaz boşluk ve satır ayırıcısı olduğu gerçeğinden kaynaklanan bu eksikliğin nasıl giderileceği aşağıda açıklanmıştır. Yapmamız gereken şey, yeni satır dışındaki yalnızca beyaz karakterleri içeren bir yeniden sınıf oluşturmaktır.
Doğrudan bir sınıfta ifade edilemeyen whitespace and not newline
istiyoruz. , yani not(not whitespace or not not newline
(teşekkürler, Augustus), yani not(not whitespace or newline)
no., re
notasyonunda yeniden yazalım. Yani
:
>>> re.sub(r"(?m)^[^\S\n]+", "", " a\n\n \n\n b\n c\nd e")
'a\n\n\n\nb\nc\nd e'
Aslında bu zaman çoğu için normal ifadeleri gerekmez. Yalnızca birden fazla satır boyunca ortak girinti kaldırmak için arıyorsanız, textwrap
modülü deneyin:
>>> import textwrap
>>> messy_text = " grrr\n whitespace\n everywhere"
>>> print textwrap.dedent(messy_text)
grrr
whitespace
everywhere
Not:
>>> very_messy_text = " grrr\n \twhitespace\n everywhere"
>>> print textwrap.dedent(very_messy_text)
grrr
whitespace
everywhere
boşluk satır karakterleri içerir, Bu, çok satırlı bir dizede kullanırsanız, her şeyin tek bir satırda sona ereceği anlamına gelir. Bize biraz giriş göster, böylece soruyu anlamaya yardımcı olabiliriz! – rdrey
@rdrey: Aslında, '^' çok satırlı modda * her yeni satırın * ile eşleşir, bu nedenle sorun olmaz ("\ n \ n" dışında). Cevabımı gör. Bu düzeltme için – AndiDog
teşekkürler. Her gün yeni bir şeyler öğrenmek: D – rdrey