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

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

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

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

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

//docs.raku.org/language/regexes#unicode_properies //www.codesections.com/blog/raku-unicode/ //raku.org
//www.codesections.com/blog/raku-unicode/
//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 ..

Chủ Đề