Pertanyaan Bagaimana cara memangkas spasi?


Apakah ada fungsi Python yang akan memangkas spasi (spasi dan tab) dari string?

Contoh: \t example string\t → example string


894
2017-07-26 20:54


asal


Jawaban:


Spasi di kedua sisi:

s = "  \t a string example\t  "
s = s.strip()

Spasi di sisi kanan:

s = s.rstrip()

Spasi di sisi kiri:

s = s.lstrip()

Sebagai thedz menunjukkan, Anda dapat memberikan argumen untuk menghapus karakter arbitrer ke salah satu fungsi ini seperti ini:

s = s.strip(' \t\n\r')

Ini akan menghapus ruang apa pun, \t, \n, atau \r karakter dari sisi kiri, sisi kanan, atau kedua sisi string.

Contoh di atas hanya menghapus string dari sisi kiri dan kanan string. Jika Anda ingin juga menghapus karakter dari tengah string, cobalah re.sub:

import re
print re.sub('[\s+]', '', s)

Itu harus dicetak:

astringexample

1347
2017-07-26 20:56



Python trim metode dipanggil strip:

str.strip() #trim
str.lstrip() #ltrim
str.rstrip() #rtrim

55
2018-02-17 10:00



Untuk spasi putih terkemuka dan tertinggal:

s = '   foo    \t   '
print s.strip() # prints "foo"

Jika tidak, ekspresi reguler berfungsi:

import re
pat = re.compile(r'\s+')
s = '  \t  foo   \t   bar \t  '
print pat.sub('', s) # prints "foobar"

20
2017-07-26 20:56



Anda juga dapat menggunakan fungsi yang sangat sederhana, dan dasar: str.replace (), berfungsi dengan spasi dan tab putih:

>>> whitespaces = "   abcd ef gh ijkl       "
>>> tabs = "        abcde       fgh        ijkl"

>>> print whitespaces.replace(" ", "")
abcdefghijkl
>>> print tabs.replace(" ", "")
abcdefghijkl

Sederhana dan mudah.


18
2018-06-11 14:18



#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 ']

12
2018-02-13 05:16



Belum ada yang memposting solusi regex ini.

Sesuai:

>>> 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

Pencarian (Anda harus menangani kasus input "hanya spasi" secara 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 re.sub, Anda dapat menghapus ruang putih di bagian dalam, yang mungkin tidak diinginkan.


4
2018-02-12 02:22



Spasi kosong termasuk ruang, tab dan CRLF. Jadi yang elegan dan satu-liner fungsi string yang bisa kita gunakan adalah menterjemahkan.

' hello apple'.translate(None, ' \n\t\r')

ATAU jika kamu ingin teliti

import string
' hello  apple'.translate(None, string.whitespace)

3
2017-11-28 05:45