Tôi có số lượng văn bản khá lớn bao gồm các thẻ điều khiển như \ n \ t và \ r. Tôi cần phải thay thế chúng bằng một không gian đơn giản -> "". Cách nhanh nhất để làm điều này là gì? Cảm ơnXóa các ký tự điều khiển cụ thể ( n r t) từ một chuỗi
Trả lời
Tôi nghĩ rằng cách nhanh nhất là sử dụng str.translate()
:
import string
s = "a\nb\rc\td"
print s.translate(string.maketrans("\n\t\r", " "))
in
a b c d
EDIT: Khi điều này một lần nữa biến thành một cuộc thảo luận về hiệu suất, ở đây một số con số. Đối với chuỗi dài, translate()
là cách nhanh hơn so với sử dụng biểu thức thông thường:
s = "a\nb\rc\td " * 1250000
regex = re.compile(r'[\n\r\t]')
%timeit t = regex.sub(" ", s)
# 1 loops, best of 3: 1.19 s per loop
table = string.maketrans("\n\t\r", " ")
%timeit s.translate(table)
# 10 loops, best of 3: 29.3 ms per loop
Đó là về một yếu tố 40.
Điều quan trọng cần lưu ý là string.translate và string.makestrans không có sẵn trong Python3. giải pháp dựa trên dường như tốt hơn. –
@Ignacio: chuỗi nhập khẩu; hasattr (chuỗi, 'dịch'); hasattr (chuỗi, 'maketrans') Nó sẽ là Sai, nếu bạn làm hasattr (str, 'dịch') và hasattr (str, 'maketrans') nó là đúng. chuỗi mô-đun chỉ là một tập hợp các hằng số chuỗi. Hơn nữa, theo định nghĩa và cách thức thích hợp để sử dụng maketrans sẽ là bytes.maketrans. Cảm ơn! –
Bạn cũng có thể thử biểu thức thông thường:
import re
regex = re.compile(r'[\n\r\t]')
regex.sub(' ', my_str)
Tôi đã so sánh hiệu suất thực tế và có vẻ như sử dụng cụm từ thông dụng nhanh như sử dụng mô-đun chuỗi. –
'python2.6 timeit.py -s" chuỗi nhập khẩu "-s" s = 'a \ nb \ rc \ td' "-s" s.translate (chuỗi.maketrans ('\ n \ t \ r', ' ')) "' 10000000 vòng, tốt nhất là 3: 0,0235 usec mỗi vòng lặp –
'python2.6 timeit.py -s" nhập lại "-s" regex = re.compile (r' [\ n \ r \ t] ') "-s" regex.sub (' ',' a \ nb \ rc \ td ') "' 10000000 vòng, tốt nhất là 3: 0,0232 usec mỗi vòng lặp –
>>> re.sub(r'[\t\n\r]', ' ', '1\n2\r3\t4')
'1 2 3 4'
sử dụng regex
re.sub(r'\s+', ' ', '1\n2\r3\t4')
mà không regex
>>> ' '.join('1\n\n2\r3\t4'.split())
'1 2 3 4'
>>>
Nếu bạn muốn bình thường hóa whi tespace (thay thế chạy của một hoặc nhiều ký tự khoảng trắng bởi một không gian duy nhất, và dải hàng đầu và dấu khoảng trắng) này có thể được thực hiện bằng cách sử dụng phương pháp chuỗi:
>>> text = ' foo\tbar\r\nFred Nurke\t Joe Smith\n\n'
>>> ' '.join(text.split())
'foo bar Fred Nurke Joe Smith'
's' là chuỗi mà bạn muốn xóa cụ thể kiểm soát các ký tự. Vì các chuỗi là bất biến trong python, sau khi thao tác thay thế, bạn cần gán nó cho một chuỗi khác.
s = re.sub (r '[\ n \ r \ t] *', '', s)
- 1. Xóa ký tự điều khiển khỏi một tệp
- 2. Xóa n ký tự khỏi đầu chuỗi
- 3. Xóa ký tự sau ký tự cụ thể trong chuỗi, sau đó xóa chuỗi con?
- 4. Trích xuất các ký tự n cuối cùng từ một chuỗi trong R
- 5. cách xóa tất cả các cá thể của một ký tự cụ thể khỏi một chuỗi
- 6. Xóa các ký tự từ chuỗi
- 7. Làm cách nào để xóa các ký tự cụ thể khỏi một Chuỗi cụ thể trong Java?
- 8. tạo chuỗi ký tự N
- 9. Làm cách nào để xóa tất cả các ký tự điều khiển khỏi chuỗi java?
- 10. Xóa \ n hoặc \ t khỏi một chuỗi đã cho
- 11. Xóa N ký tự đầu tiên khỏi chuỗi
- 12. Cắt các ký tự từ một chuỗi
- 13. Điều gì là sai với các ký tự điều khiển trong công cụ dòng lệnh PHPUnit?
- 14. Chuỗi cắt php ở một ký tự cụ thể
- 15. Xóa một số ký tự nhất định khỏi một chuỗi trong R
- 16. Vấn đề Socket.IO với các ký tự điều khiển
- 17. Notepad ++ Cách xóa tất cả ký tự đứng trước một ký tự cụ thể
- 18. Làm cách nào để xóa các ký tự dòng mới khỏi chuỗi?
- 19. Xóa các ký tự từ CharSequence có thể chia sẻ
- 20. Xóa các phần tử khỏi danh sách chứa các ký tự cụ thể
- 21. Làm thế nào để xóa tất cả các ký tự sau một ký tự trong chuỗi?
- 22. Xóa ký tự sau chuỗi?
- 23. xóa dữ liệu trong ô sau ký tự cụ thể
- 24. Xóa tất cả các ký tự đặc biệt khỏi chuỗi trong R?
- 25. Xóa ký tự cuối cùng trong một chuỗi trong T-SQL?
- 26. Thay thế các ký tự Unicode cụ thể trong chuỗi được đọc từ Excel
- 27. Xóa một chuỗi cụ thể với tr
- 28. Xóa các tệp không chứa một chuỗi cụ thể
- 29. VIM: Xóa tất cả các ký tự trước khi từ cụ thể cho tất cả các dòng trong một file
- 30. Ký tự để sử dụng cho \ r \ n khi chèn vào SQL Server
Rõ ràng, như Zen của Python cho thấy, chỉ có cách để làm điều đó; -) – gruszczy
khi chuỗi có nhiều ký tự liền kề như vậy, ví dụ: 'foo \ r \ nbar', bạn có muốn thay thế' \ r \ n' bằng hai dấu cách hoặc chỉ 1 không? –
Tôi muốn thay thế bằng chỉ 1 – Hossein