ตัดช่องว่าง / แท็บ / บรรทัดใหม่ - python


101

ฉันพยายามลบช่องว่าง / แท็บ / บรรทัดใหม่ทั้งหมดใน python 2.7 บน Linux

ฉันเขียนสิ่งนี้ซึ่งควรจะทำงาน:

myString="I want to Remove all white \t spaces, new lines \n and tabs \t"
myString = myString.strip(' \n\t')
print myString

เอาต์พุต:

I want to Remove all white   spaces, new lines 
 and tabs

ดูเหมือนเป็นเรื่องง่ายๆที่ต้องทำ แต่ฉันพลาดบางอย่างที่นี่ ฉันควรนำเข้าบางอย่างหรือไม่?


ดูคำตอบสำหรับคำถามที่เกี่ยวข้องนี้: stackoverflow.com/questions/1185524/… strip () ลบเฉพาะอักขระนำหน้าและต่อท้ายไม่ใช่อักขระทั้งหมด
dckrooney

1
อาจมีประโยชน์: stackoverflow.com/questions/8928557/…
newtover

1
สิ่งนี้ใช้ได้ผลสำหรับฉันจาก: [วิธีตัดช่องว่าง (รวมถึงแท็บ)?] [1] s = s.strip ('\ t \ n \ r') [1]: stackoverflow.com/questions/1185524/…
stamat

คำตอบ:


129

ใช้str.split([sep[, maxsplit]])โดยไม่มีsepหรือsep=None:

จากเอกสาร :

หากsepไม่ได้ระบุไว้หรือเป็นจะNoneใช้อัลกอริทึมการแบ่งที่แตกต่างกัน: การรันของช่องว่างที่ต่อเนื่องกันจะถือเป็นตัวคั่นเดียวและผลลัพธ์จะไม่มีสตริงว่างที่จุดเริ่มต้นหรือจุดสิ้นสุดหากสตริงมีช่องว่างนำหน้าหรือต่อท้าย

การสาธิต:

>>> myString.split()
['I', 'want', 'to', 'Remove', 'all', 'white', 'spaces,', 'new', 'lines', 'and', 'tabs']

ใช้str.joinในรายการที่ส่งคืนเพื่อรับผลลัพธ์นี้:

>>> ' '.join(myString.split())
'I want to Remove all white spaces, new lines and tabs'

58

หากคุณต้องการลบรายการช่องว่างหลายรายการและแทนที่ด้วยช่องว่างเดียววิธีที่ง่ายที่สุดคือใช้ regexp ดังนี้:

>>> import re
>>> myString="I want to Remove all white \t spaces, new lines \n and tabs \t"
>>> re.sub('\s+',' ',myString)
'I want to Remove all white spaces, new lines and tabs '

จากนั้นคุณสามารถลบช่องว่างต่อท้ายด้วย.strip()ถ้าคุณต้องการ


15

ใช้ไลบรารีใหม่

import re
myString = "I want to Remove all white \t spaces, new lines \n and tabs \t"
myString = re.sub(r"[\n\t\s]*", "", myString)
print myString

เอาท์พุต:

IwanttoRemoveallwhitespaces, newlinesandtabs


1
นี่เป็นการแก้ไขคำตอบเดิมของ @ TheGr8Adakron ไม่ใช่คำตอบที่ซ้ำกัน
Jesuisme


11

การดำเนินการนี้จะลบเฉพาะแท็บบรรทัดใหม่ช่องว่างและสิ่งอื่น ๆ

import re
myString = "I want to Remove all white \t spaces, new lines \n and tabs \t"
output   = re.sub(r"[\n\t\s]*", "", myString)

เอาท์พุท:

IwantoRemoveallwhiespaces, newlinesandtabs

ขอให้เป็นวันที่ดี!


1
ขอบคุณสำหรับวิธีแก้ปัญหา - ฉันคิดว่าจำเป็นต้องมีการแก้ไขเล็กน้อยควรเป็น "+" แทน "*"
Sajad Karim

6

วิธีแก้ปัญหาข้างต้นที่แนะนำการใช้ regex นั้นไม่เหมาะอย่างยิ่งเนื่องจากเป็นงานเล็ก ๆ และ regex ต้องการทรัพยากรเหนือศีรษะมากกว่าความเรียบง่ายของงานที่เป็นตัวกำหนด

นี่คือสิ่งที่ฉันทำ:

myString = myString.replace(' ', '').replace('\t', '').replace('\n', '')

หรือหากคุณมีหลายสิ่งที่ต้องลบออกเช่นนั้นโซลูชันบรรทัดเดียวจะยาวโดยไม่จำเป็น:

removal_list = [' ', '\t', '\n']
for s in removal_list:
  myString = myString.replace(s, '')

2

เนื่องจากไม่มีสิ่งอื่นใดที่ซับซ้อนกว่านี้ฉันจึงอยากแบ่งปันสิ่งนี้เพราะมันช่วยฉันได้

นี่คือสิ่งที่ฉันใช้ในตอนแรก:

import requests
import re

url = '/programming/10711116/strip-spaces-tabs-newlines-python' # noqa
headers = {'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=headers)
print("{}".format(r.content))

ผลลัพธ์ที่ไม่ต้องการ:

b'<!DOCTYPE html>\r\n\r\n\r\n    <html itemscope itemtype="http://schema.org/QAPage" class="html__responsive">\r\n\r\n    <head>\r\n\r\n        <title>string - Strip spaces/tabs/newlines - python - Stack Overflow</title>\r\n        <link

นี่คือสิ่งที่ฉันเปลี่ยนเป็น:

import requests
import re

url = '/programming/10711116/strip-spaces-tabs-newlines-python' # noqa
headers = {'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=headers)
regex = r'\s+'
print("CNT: {}".format(re.sub(regex, " ", r.content.decode('utf-8'))))

ผลลัพธ์ที่ต้องการ:

<!DOCTYPE html> <html itemscope itemtype="http://schema.org/QAPage" class="html__responsive"> <head> <title>string - Strip spaces/tabs/newlines - python - Stack Overflow</title>

regex ที่แม่นยำที่ @MattH พูดถึงคือสิ่งที่ใช้ได้ผลสำหรับฉันในการปรับให้เข้ากับรหัสของฉัน ขอบคุณ!

หมายเหตุ: นี่คือ python3


0

แล้ว one-liner ใช้ความเข้าใจรายการภายใน join ล่ะ?

>>> foobar = "aaa bbb\t\t\tccc\nddd"
>>> print(foobar)
aaa bbb                 ccc
ddd

>>> print(''.join([c for c in foobar if c not in [' ', '\t', '\n']]))
aaabbbcccddd
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.