亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用單個空格替換非ASCII字符

用單個空格替換非ASCII字符

白豬掌柜的 2019-08-01 14:18:59
用單個空格替換非ASCII字符我需要用空格替換所有非ASCII(\ x00- \ x7F)字符。我很驚訝這在Python中并不容易,除非我遺漏了一些東西。以下函數只刪除所有非ASCII字符:def remove_non_ascii_1(text):     return ''.join(i for i in text if ord(i)<128)并且這個用字符代碼點中的字節數替換非ASCII字符和空格量(即–字符被3個空格替換):def remove_non_ascii_2(text):     return re.sub(r'[^\x00-\x7F]',' ', text)如何用單個空格替換所有非ASCII字符?
查看完整描述

3 回答

?
侃侃爾雅

TA貢獻1801條經驗 獲得超16個贊

你的''.join()表達式是過濾,刪除任何非ASCII; 您可以使用條件表達式:

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

這將逐個處理字符,并且每個字符仍然會替換一個空格。

您的正則表達式應該只用空格替換連續的非ASCII字符:

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

請注意+那里。


查看完整回答
反對 回復 2019-08-01
?
慕無忌1623718

TA貢獻1744條經驗 獲得超4個贊

對于你來說,獲得最相似的原始字符串表示我推薦使用unidecode模塊

from unidecode import unidecodedef remove_non_ascii(text):
    return unidecode(unicode(text, encoding = "utf-8"))

然后你可以在字符串中使用它:

remove_non_ascii("Ce?ía")
Cenia


查看完整回答
反對 回復 2019-08-01
?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

對于字符處理,請使用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'

但請注意,如果您的字符串包含已分解的Unicode字符(例如,單獨的字符和組合重音符號),您仍會遇到問題:


>>> s = 'ma?ana'

>>> len(s)

6

>>> import unicodedata as ud

>>> n=ud.normalize('NFD',s)

>>> n

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


查看完整回答
反對 回復 2019-08-01
  • 3 回答
  • 0 關注
  • 571 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號