Dải dấu cách / tab / dòng mới - python


94

Tôi đang cố gắng xóa tất cả dấu cách / tab / dòng mới trong python 2.7 trên Linux.

Tôi đã viết điều này, điều đó sẽ thực hiện công việc:

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

đầu ra:

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

Nó có vẻ như là một điều đơn giản để làm, nhưng tôi vẫn thiếu ở đây một cái gì đó. Tôi có nên nhập một cái gì đó không?


Kiểm tra câu trả lời cho câu hỏi liên quan này: stackoverflow.com/questions/1185524/… strip () chỉ xóa các ký tự đầu và cuối chứ không phải TẤT CẢ các ký tự.
dckrooney


1
Điều này phù hợp với tôi, từ: [Cách cắt bỏ khoảng trắng (bao gồm các tab)?] [1] s = s.strip ('\ t \ n \ r') [1]: stackoverflow.com/questions/1185524/…
stamat

Câu trả lời:


124

Sử dụng str.split([sep[, maxsplit]])với không sephoặc sep=None:

Từ tài liệu :

Nếu sepkhông được chỉ định hoặc là None, một thuật toán tách khác được áp dụng: các khoảng trắng liên tiếp được coi là một dấu phân tách duy nhất và kết quả sẽ không chứa chuỗi trống ở đầu hoặc cuối nếu chuỗi có khoảng trắng đầu hoặc cuối.

Bản giới thiệu:

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

Sử dụng str.jointrong danh sách trả về để lấy kết quả này:

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

57

Nếu bạn muốn xóa nhiều mục khoảng trắng và thay thế chúng bằng các khoảng trắng, cách dễ nhất là sử dụng regexp như sau:

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

Sau đó, bạn có thể xóa khoảng trắng ở cuối .strip()nếu muốn.


13

Sử dụng thư viện lại

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

Đầu ra:

IwanttoRemoveallwhitespaces, newlinesandtabs


1
Đây là bản chỉnh sửa câu trả lời ban đầu được đưa ra bởi @ TheGr8Adakron, không phải là bản sao
Jesuisme

12
import re

mystr = "I want to Remove all white \t spaces, new lines \n and tabs \t"
print re.sub(r"\W", "", mystr)

Output : IwanttoRemoveallwhitespacesnewlinesandtabs

4
điều này cũng loại bỏ ';'
Tháng Một

10

Thao tác này sẽ chỉ xóa tab, dòng mới, khoảng trắng và không có gì khác.

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)

ĐẦU RA:

IwantoRemoveallwhiespaces, newlinesandtabs

Ngày tốt!


1
Cảm ơn vì giải pháp - Tôi nghĩ rằng cần sửa một chút, nó phải là '+' thay vì '*'.
Sajad Karim

5

Các giải pháp trên đề xuất việc sử dụng regex là không lý tưởng vì đây là một nhiệm vụ nhỏ như vậy và regex đòi hỏi chi phí tài nguyên nhiều hơn so với mức độ đơn giản của nhiệm vụ.

Đây là những gì tôi làm:

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

hoặc nếu bạn có một loạt thứ cần loại bỏ để giải pháp một dòng sẽ dài một cách vô cớ:

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

2

Vì không có bất cứ điều gì khác phức tạp hơn, tôi muốn chia sẻ điều này vì nó đã giúp tôi.

Đây là những gì tôi đã sử dụng ban đầu:

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

Kết quả không mong muốn:

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

Đây là những gì tôi đã thay đổi nó thành:

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

Kết quả như ý:

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

Regex chính xác mà @MattH đã đề cập, là thứ phù hợp với tôi trong việc lắp nó vào mã của tôi. Cảm ơn!

Lưu ý: Đây là python3

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.