Apakah ada Python fungsi yang akan trim whitespace (spasi dan tab) dari string?
Contoh: \t contoh string\t
→ contoh string
Spasi di kedua sisi:
s = " \t a string example\t "
s = s.strip()
Ruang kosong di sisi kanan:
s = s.rstrip()
Ruang kosong di sisi kiri:
s = s.lstrip()
Sebagai thedz poin, anda dapat memberikan argumen untuk strip sewenang-wenang karakter untuk setiap fungsi-fungsi tersebut seperti ini:
s = s.strip(' \t\n\r')
Ini akan strip setiap ruang, \t
, \n
, atau \r
karakter dari sisi kiri, sisi kanan, atau kedua sisi dari string.
Contoh di atas hanya menghapus string dari sebelah kiri dan kanan sisi dari string. Jika anda juga ingin menghapus karakter dari tengah-tengah string, coba kembali.sub
:
import re
print re.sub('[\s+]', '', s)
Yang harus print out:
astringexample
Untuk leading dan trailing whitespace:
s = ' foo \t '
print s.strip() # prints "foo"
Sebaliknya, ekspresi reguler bekerja:
import re
pat = re.compile(r'\s+')
s = ' \t foo \t bar \t '
print pat.sub('', s) # prints "foobar"
Anda juga dapat menggunakan sangat sederhana, dan fungsi dasar: str.mengganti(), bekerja dengan spasi putih dan tab:
>>> whitespaces = " abcd ef gh ijkl "
>>> tabs = " abcde fgh ijkl"
>>> print whitespaces.replace(" ", "")
abcdefghijkl
>>> print tabs.replace(" ", "")
abcdefghijkl
Sederhana dan mudah.
#how to trim a multi line string or a file
s=""" line one
\tline two\t
line three """
#line1 starts with a space, #2 starts and ends with a tab, #3 ends with a space.
s1=s.splitlines()
print s1
[' line one', '\tline two\t', 'line three ']
print [i.strip() for i in s1]
['line one', 'line two', 'line three']
#more details:
#we could also have used a forloop from the begining:
for line in s.splitlines():
line=line.strip()
process(line)
#we could also be reading a file line by line.. e.g. my_file=open(filename), or with open(filename) as myfile:
for line in my_file:
line=line.strip()
process(line)
#moot point: note splitlines() removed the newline characters, we can keep them by passing True:
#although split() will then remove them anyway..
s2=s.splitlines(True)
print s2
[' line one\n', '\tline two\t\n', 'line three ']
Tidak ada yang telah diposting ini regex solusi belum.
Pencocokan:
>>> import re
>>> p=re.compile('\\s*(.*\\S)?\\s*')
>>> m=p.match(' \t blah ')
>>> m.group(1)
'blah'
>>> m=p.match(' \tbl ah \t ')
>>> m.group(1)
'bl ah'
>>> m=p.match(' \t ')
>>> print m.group(1)
None
Mencari (anda harus menangani "hanya ruang" input kasus berbeda):
>>> p1=re.compile('\\S.*\\S')
>>> m=p1.search(' \tblah \t ')
>>> m.group()
'blah'
>>> m=p1.search(' \tbl ah \t ')
>>> m.group()
'bl ah'
>>> m=p1.search(' \t ')
>>> m.group()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
Jika anda menggunakan kembali.sub
, anda dapat menghapus batin spasi, yang bisa menjadi tidak diinginkan.
(re.sub(' +', ' ',(my_str.mengganti('\n',' ')))).strip()
Ini akan menghapus semua yang tidak diinginkan spasi dan newline karakter. Semoga bantuan ini
import re
my_str = ' a b \n c '
formatted_str = (re.sub(' +', ' ',(my_str.replace('\n',' ')))).strip()
Hal ini akan mengakibatkan :
' a b \n c ' akan berubah menjadi 'a b c'
Spasi termasuk spasi, tab, dan CRLF. Jadi yang elegan dan satu-liner string fungsi yang bisa kita gunakan adalah terjemahkan.
' hello apple'.menerjemahkan(Tidak ada, ' \n\t\r')
ATAU jika anda ingin menjadi menyeluruh
import string
' hello apple'.translate(None, string.whitespace)
Jika menggunakan Python 3: Di cetak laporan, menyelesaikan dengan sep="". Yang akan memisahkan semua ruang.
CONTOH:
txt="potatoes"
print("I love ",txt,"",sep="")
Ini akan mencetak: Saya suka kentang.
Bukannya dari: Saya suka kentang .
Dalam kasus anda, karena anda akan mencoba untuk mendapatkan tumpangan dari \t, lakukan sep=" t"
mencoba menerjemahkan
>>> import string
>>> print '\t\r\n hello \r\n world \t\r\n'
hello
world
>>> tr = string.maketrans(string.whitespace, ' '*len(string.whitespace))
>>> '\t\r\n hello \r\n world \t\r\n'.translate(tr)
' hello world '
>>> '\t\r\n hello \r\n world \t\r\n'.translate(tr).replace(' ', '')
'helloworld'
Jika anda ingin memangkas spasi off hanya awal dan akhir string, anda dapat melakukan sesuatu seperti ini:
some_string = " Hello, world!\n "
new_string = some_string.strip()
# new_string is now "Hello, world!"
Ini bekerja mirip seperti Qt's QString::dipangkas() metode, dalam hal ini menghilangkan terkemuka dan trailing whitespace, sementara meninggalkan internal spasi saja.
Tapi jika anda'd suka sesuatu seperti Qt's QString::sederhana() metode yang tidak hanya menghilangkan terkemuka dan trailing whitespace, tetapi juga "squishes" semua berturut-turut internal spasi untuk satu karakter spasi, anda dapat menggunakan kombinasi .split()
dan " ".bergabung
, seperti ini:
some_string = "\t Hello, \n\t world!\n "
new_string = " ".join(some_string.split())
# new_string is now "Hello, world!"
Dalam contoh terakhir ini, masing-masing urutan internal spasi diganti dengan spasi tunggal, sementara masih pemangkasan whitespace di awal dan akhir string.
Biasanya, saya menggunakan metode berikut:
>>> myStr = "Hi\n Stack Over \r flow!"
>>> charList = [u"\u005Cn",u"\u005Cr",u"\u005Ct"]
>>> import re
>>> for i in charList:
myStr = re.sub(i, r"", myStr)
>>> myStr
'Hi Stack Over flow'
Catatan: Ini adalah hanya untuk menghilangkan "\n", "\r" dan " t" saja. Ini tidak menghapus spasi.
untuk menghilangkan spasi putih dari tengah-tengah string
$p = "ATGCGAC ACGATCGACC";
$p =~ s/\s//g;
print $p;
output:
ATGCGACACGATCGACC