Hướng dẫn how do i remove the ascii character from a string in python? - làm cách nào để xóa ký tự ascii khỏi một chuỗi trong python?

Tôi cần thay thế tất cả các ký tự không phải ASCII (\ x00- \ x7F) bằng một không gian. Tôi ngạc nhiên rằng điều này không dễ dàng ở Python, trừ khi tôi thiếu một cái gì đó. Chức năng sau đây chỉ đơn giản là loại bỏ tất cả các ký tự không phải ASCII:

def remove_non_ascii_1(text):

    return ''.join(i for i in text if ord(i)<128)

Và cái này thay thế các ký tự không phải ASCII bằng số lượng không gian theo lượng byte trong điểm mã ký tự (nghĩa là ký tự

re.sub(r'[^\x00-\x7F]+',' ', text)
0 được thay thế bằng 3 khoảng trắng):

def remove_non_ascii_2(text):

    return re.sub(r'[^\x00-\x7F]',' ', text)

Làm thế nào tôi có thể thay thế tất cả các ký tự không phải ASCII bằng một không gian?

Trong số vô số câu hỏi tương tự, không có sự thay thế ký tự địa chỉ nào trái ngược với việc tước bỏ, và thêm vào tất cả các ký tự không phải ASCII không phải là một nhân vật cụ thể.

Hướng dẫn how do i remove the ascii character from a string in python? - làm cách nào để xóa ký tự ascii khỏi một chuỗi trong python?

Đã hỏi ngày 19 tháng 11 năm 2013 lúc 18:09Nov 19, 2013 at 18:09

dotancohendotancohendotancohen

28.7K33 Huy hiệu vàng133 Huy hiệu bạc192 Huy hiệu Đồng33 gold badges133 silver badges192 bronze badges

10

Biểu thức

re.sub(r'[^\x00-\x7F]+',' ', text)
1 của bạn đang lọc, loại bỏ bất cứ thứ gì không phải là ASCII; Thay vào đó, bạn có thể sử dụng một biểu thức có điều kiện:

return ''.join([i if ord(i) < 128 else ' ' for i in text])

Điều này xử lý từng ký tự một và vẫn sẽ sử dụng một không gian cho mỗi ký tự được thay thế.

Biểu thức thông thường của bạn chỉ nên thay thế các ký tự không ASCII liên tiếp bằng một không gian:

re.sub(r'[^\x00-\x7F]+',' ', text)

Lưu ý

re.sub(r'[^\x00-\x7F]+',' ', text)
2 ở đó.

Đã trả lời ngày 19 tháng 11 năm 2013 lúc 18:11Nov 19, 2013 at 18:11

Martijn Pieters ♦ Martijn PietersMartijn Pieters

993K277 Huy hiệu vàng3913 Huy hiệu bạc3257 Huy hiệu đồng277 gold badges3913 silver badges3257 bronze badges

4

Đối với bạn, nhận được biểu diễn giống nhau nhất của chuỗi ban đầu của bạn, tôi đề xuất mô -đun unidecode:

# python 2.x:
from unidecode import unidecode
def remove_non_ascii(text):
    return unidecode(unicode(text, encoding = "utf-8"))

Sau đó, bạn có thể sử dụng nó trong một chuỗi:

remove_non_ascii("Ceñía")
Cenia

MIT

10,8k10 Huy hiệu vàng47 Huy hiệu bạc74 Huy hiệu đồng10 gold badges47 silver badges74 bronze badges

Đã trả lời ngày 18 tháng 2 năm 2016 lúc 20:50Feb 18, 2016 at 20:50

Hướng dẫn how do i remove the ascii character from a string in python? - làm cách nào để xóa ký tự ascii khỏi một chuỗi trong python?

7

Để xử lý ký tự, hãy sử dụng chuỗi Unicode:

PythonWin 3.3.0 (v3.3.0:bd8afb90ebf2, Sep 29 2012, 10:57:17) [MSC v.1600 64 bit (AMD64)] on win32.
>>> s='ABC马克def'
>>> import re
>>> re.sub(r'[^\x00-\x7f]',r' ',s)   # Each char is a Unicode codepoint.
'ABC  def'
>>> b = s.encode('utf8')
>>> re.sub(rb'[^\x00-\x7f]',rb' ',b) # Each char is a 3-byte UTF-8 sequence.
b'ABC      def'

Nhưng lưu ý rằng bạn vẫn sẽ gặp sự cố nếu chuỗi của bạn chứa các ký tự Unicode bị phân tách (ví dụ: ký tự riêng biệt và kết hợp các dấu Accent):

>>> s = 'mañana'
>>> len(s)
6
>>> import unicodedata as ud
>>> n=ud.normalize('NFD',s)
>>> n
'mañana'
>>> len(n)
7
>>> re.sub(r'[^\x00-\x7f]',r' ',s) # single codepoint
'ma ana'
>>> re.sub(r'[^\x00-\x7f]',r' ',n) # only combining mark replaced
'man ana'

Đã trả lời ngày 19 tháng 11 năm 2013 lúc 18:29Nov 19, 2013 at 18:29

Hướng dẫn how do i remove the ascii character from a string in python? - làm cách nào để xóa ký tự ascii khỏi một chuỗi trong python?

Mark Tolonenmark TolonenMark Tolonen

156K24 Huy hiệu vàng163 Huy hiệu bạc237 Huy hiệu Đồng24 gold badges163 silver badges237 bronze badges

3

Nếu nhân vật thay thế có thể là '?' Thay vì một không gian, thì tôi sẽ đề xuất

re.sub(r'[^\x00-\x7F]+',' ', text)
3:

"""Test the performance of different non-ASCII replacement methods."""


import re
from timeit import timeit


# 10_000 is typical in the project that I'm working on and most of the text
# is going to be non-ASCII.
text = 'Æ' * 10_000


print(timeit(
    """
result = ''.join([c if ord(c) < 128 else '?' for c in text])
    """,
    number=1000,
    globals=globals(),
))

print(timeit(
    """
result = text.encode('ascii', 'replace').decode()
    """,
    number=1000,
    globals=globals(),
))

Results:

0.7208260721400134
0.009975979187503592

Đã trả lời ngày 3 tháng 1 năm 2017 lúc 6:31Jan 3, 2017 at 6:31

Hướng dẫn how do i remove the ascii character from a string in python? - làm cách nào để xóa ký tự ascii khỏi một chuỗi trong python?

AxoaxoAXO

7.4955 Huy hiệu vàng57 Huy hiệu bạc58 Huy hiệu Đồng5 gold badges57 silver badges58 bronze badges

1

Cái này thì sao?

def remove_non_ascii_2(text):

    return re.sub(r'[^\x00-\x7F]',' ', text)
0

Đã trả lời ngày 20 tháng 8 năm 2016 lúc 22:35Aug 20, 2016 at 22:35

Hướng dẫn how do i remove the ascii character from a string in python? - làm cách nào để xóa ký tự ascii khỏi một chuỗi trong python?

Parsecerparsecerparsecer

4.16010 Huy hiệu vàng55 Huy hiệu bạc115 Huy hiệu Đồng10 gold badges55 silver badges115 bronze badges

5

Là một cách tiếp cận bản địa và hiệu quả, bạn không cần phải sử dụng

re.sub(r'[^\x00-\x7F]+',' ', text)
4 hoặc bất kỳ vòng lặp nào trên các ký tự. Chỉ cần mã hóa với
re.sub(r'[^\x00-\x7F]+',' ', text)
5 và bỏ qua các lỗi.

Sau đây sẽ chỉ xóa các ký tự không phải ASCII:

def remove_non_ascii_2(text):

    return re.sub(r'[^\x00-\x7F]',' ', text)
1

Bây giờ nếu bạn muốn thay thế các ký tự đã xóa, chỉ cần thực hiện như sau:

def remove_non_ascii_2(text):

    return re.sub(r'[^\x00-\x7F]',' ', text)
2

Đã trả lời ngày 23 tháng 1 năm 2018 lúc 14:39Jan 23, 2018 at 14:39

Hướng dẫn how do i remove the ascii character from a string in python? - làm cách nào để xóa ký tự ascii khỏi một chuỗi trong python?

MazdakmazdakMazdak

102K18 Huy hiệu vàng157 Huy hiệu bạc183 Huy hiệu đồng18 gold badges157 silver badges183 bronze badges

2

Khi chúng tôi sử dụng

re.sub(r'[^\x00-\x7F]+',' ', text)
6, nó thoát khỏi các ký tự không phải ASCII và nó không thay đổi các ký tự ASCII một cách chính xác. Vì vậy, suy nghĩ chính của tôi là, nó không thay đổi các ký tự ASCII, vì vậy tôi đang lặp lại qua chuỗi và kiểm tra xem ký tự có được thay đổi không. Nếu nó thay đổi thì thay thế nó bằng bộ thay thế, những gì bạn đưa ra. Ví dụ: '' (một không gian duy nhất) hoặc '?' (với một dấu hỏi).
For example: ' '(a single space) or '?' (with a question mark).

def remove_non_ascii_2(text):

    return re.sub(r'[^\x00-\x7F]',' ', text)
3

Kết quả: "H I" (với một khoảng trống giữa).

Cú pháp:

re.sub(r'[^\x00-\x7F]+',' ', text)
7 STR = Ở đây bạn sẽ cung cấp chuỗi bạn muốn làm việc. Non_ascii_Replacer = Ở đây bạn sẽ cung cấp cho bộ thay thế mà bạn muốn thay thế tất cả các ký tự không ASCII bằng.
str = Here you will give the string you want to work with.
non_ascii_replacer = Here you will give the replacer which you want to replace all the non ASCII characters with.

Yunnosch

25.6K9 Huy hiệu vàng41 Huy hiệu bạc53 Huy hiệu Đồng9 gold badges41 silver badges53 bronze badges

Đã trả lời ngày 22 tháng 12 năm 2020 lúc 8:48Dec 22, 2020 at 8:48

1

Xử lý trước bằng RAKU (trước đây gọi là Perl_6)Raku (formerly known as Perl_6)

def remove_non_ascii_2(text):

    return re.sub(r'[^\x00-\x7F]',' ', text)
4

Đầu vào mẫu:

def remove_non_ascii_2(text):

    return re.sub(r'[^\x00-\x7F]',' ', text)
5

Đầu ra mẫu:

def remove_non_ascii_2(text):

    return re.sub(r'[^\x00-\x7F]',' ', text)
6

Lưu ý, bạn có thể nhận được thông tin sâu rộng về các trận đấu bằng mã sau:

def remove_non_ascii_2(text):

    return re.sub(r'[^\x00-\x7F]',' ', text)
7

Hoặc đơn giản hơn, bạn chỉ có thể hình dung các không gian trống thay thế:

def remove_non_ascii_2(text):

    return re.sub(r'[^\x00-\x7F]',' ', text)
8

https://docs.raku.org/language/regexes#unicode_properies https://www.codesections.com/blog/raku-unicode/ https://raku.org
https://www.codesections.com/blog/raku-unicode/
https://raku.org

Đã trả lời ngày 19 tháng 6 lúc 2:41Jun 19 at 2:41

jubilatious1jubilatious1jubilatious1

1.4156 huy hiệu bạc15 huy hiệu đồng6 silver badges15 bronze badges

1

Vấn đề của tôi là chuỗi của tôi chứa những thứ như

re.sub(r'[^\x00-\x7F]+',' ', text)
8 cho Bỉë và
re.sub(r'[^\x00-\x7F]+',' ', text)
9 cho dấu hiệu €. Và tôi không muốn thay thế chúng bằng không gian. Nhưng wth là biểu tượng đúng chính nó.

Giải pháp của tôi là

# python 2.x:
from unidecode import unidecode
def remove_non_ascii(text):
    return unidecode(unicode(text, encoding = "utf-8"))
0

Đã trả lời ngày 10 tháng 6 năm 2021 lúc 10:21Jun 10, 2021 at 10:21

Smoquetsmoquetsmoquet

2411 Huy hiệu bạc10 Huy hiệu đồng1 silver badge10 bronze badges

def remove_non_ascii_2(text):

    return re.sub(r'[^\x00-\x7F]',' ', text)
9

Và gọi nó như thế này:

return ''.join([i if ord(i) < 128 else ' ' for i in text])
0

Đã trả lời ngày 23 tháng 9 lúc 14:35Sep 23 at 14:35

1

Có khả năng cho một câu hỏi khác, nhưng tôi đang cung cấp phiên bản câu trả lời của @alvero (sử dụng unidecode). Tôi muốn thực hiện một dải "thông thường" trên các chuỗi của mình, tức là đầu và cuối chuỗi của tôi cho các ký tự khoảng trắng, sau đó chỉ thay thế các ký tự khoảng trắng khác bằng không gian "thông thường", tức là.

return ''.join([i if ord(i) < 128 else ' ' for i in text])
1

đến

return ''.join([i if ord(i) < 128 else ' ' for i in text])
2

Thì

return ''.join([i if ord(i) < 128 else ' ' for i in text])
3

Trước tiên chúng tôi thay thế tất cả các không gian không phải là không thể sử dụng bằng một không gian thông thường (và tham gia lại),

return ''.join([i if ord(i) < 128 else ' ' for i in text])
4

Và sau đó chúng tôi chia nó một lần nữa, với sự chia rẽ bình thường của Python và loại bỏ từng "bit",

return ''.join([i if ord(i) < 128 else ' ' for i in text])
5

Và cuối cùng tham gia lại những người đó trở lại, nhưng chỉ khi chuỗi vượt qua bài kiểm tra

# python 2.x:
from unidecode import unidecode
def remove_non_ascii(text):
    return unidecode(unicode(text, encoding = "utf-8"))
1,

return ''.join([i if ord(i) < 128 else ' ' for i in text])
6

Và với điều đó,

# python 2.x:
from unidecode import unidecode
def remove_non_ascii(text):
    return unidecode(unicode(text, encoding = "utf-8"))
2 trả về chính xác
# python 2.x:
from unidecode import unidecode
def remove_non_ascii(text):
    return unidecode(unicode(text, encoding = "utf-8"))
3.

Đã trả lời ngày 8 tháng 4 năm 2019 lúc 15:03Apr 8, 2019 at 15:03

seadersseadersseaders

3.6613 huy hiệu vàng38 Huy hiệu bạc62 Huy hiệu đồng3 gold badges38 silver badges62 bronze badges

Để thay thế tất cả các ký tự không phải ASCII (\ x00- \ x7F) bằng một khoảng trống:

return ''.join([i if ord(i) < 128 else ' ' for i in text])
7

Để thay thế tất cả các ký tự có thể nhìn thấy, hãy thử điều này:

return ''.join([i if ord(i) < 128 else ' ' for i in text])
8

Điều này sẽ cho kết quả tương tự:

return ''.join([i if ord(i) < 128 else ' ' for i in text])
9

Đã trả lời ngày 6 tháng 12 năm 2021 lúc 21:01Dec 6, 2021 at 21:01

Làm cách nào để loại bỏ giá trị ASCII trong Python?

Để xóa các ký tự không phải ASCII khỏi một chuỗi:..
Sử dụng str. Phương thức mã hóa () để mã hóa chuỗi bằng mã hóa ASCII ..
Đặt đối số lỗi thành bỏ qua, vì vậy tất cả các ký tự không phải ASCII bị bỏ ..
Sử dụng các byte. Phương thức Decode () để chuyển đổi đối tượng byte thành chuỗi ..

Làm cách nào để loại bỏ các ký tự đặc biệt khỏi một chuỗi trong Python?

Nhưng bằng cách sử dụng hàm ord (), hàm này trả về unicode của một ký tự.Điều này có thể được sử dụng để loại bỏ một ký tự khỏi một chuỗi.by using the ord() function, this function returns the Unicode of a character. This can be used to remove a character from a string.

Làm cách nào để in không

Sử dụng repr (obj) thay vì str (obj).repr () sẽ chuyển đổi kết quả thành ASCII, thoát đúng mọi thứ không có trong phạm vi mã ASCII.Việc mã hóa tệp nguồn không liên quan gì đến những gì str () hỗ trợ.str () chỉ hỗ trợ các ký tự unicode trong py3K, do đó, sử dụng repr () hoặc unicode () ở mọi nơi. . repr() will convert the result to ASCII, properly escaping everything that isn't in the ASCII code range. The encoding of the source file has nothing to do with what str() supports. str() only supports unicode characters in py3k, so either use repr() or unicode() everywhere.

Làm cách nào để loại bỏ các ký tự unicode khỏi chuỗi?

Làm thế nào để tôi thoát khỏi Unicode ?..
Sử dụng phương thức encode () và decode () ..
Sử dụng phương thức thay thế () để xóa các ký tự unicode ..
Sử dụng ký tự.phương thức isalnum () để loại bỏ các ký tự đặc biệt trong Python ..
Sử dụng biểu thức chính quy để loại bỏ các ký tự unicode cụ thể trong Python ..