代码之家  ›  专栏  ›  技术社区  ›  Hyperion

Python-替换字符串()中的非ascii字符

  •  15
  • Hyperion  · 技术社区  · 8 年前

    我需要将字符串中的字符“”替换为空白,但仍然会出现错误。这是我使用的代码:

    # -*- coding: utf-8 -*-
    from bs4 import BeautifulSoup
    
    # other code
    
    soup = BeautifulSoup(data, 'lxml')
    mystring = soup.find('a').text.replace(' »','')
    

    # -*- coding: utf-8 -*-
    a = "hi »"
    b = a.replace('»','') 
    

    它起作用了。为什么?

    2 回复  |  直到 8 年前
        1
  •  21
  •   Moinuddin Quadri    7 年前

    为了替换字符串的内容,请使用 str.replace() 方法您需要首先解码字符串,然后替换文本并将其编码回原始文本:

    >>> a = "hi »"
    >>> a.decode('utf-8').replace("»".decode('utf-8'), "").encode('utf-8')
    'hi '
    

    您还可以使用以下正则表达式从字符串中删除所有非ascii字符:

    >>> import re
    >>> re.sub(r'[^\x00-\x7f]',r'', 'hi »')
    'hi '
    
        2
  •  9
  •   blacksite    8 年前

    @Moinuddin Quadri的答案更适合您的用例,但一般来说,从给定字符串中删除非ASCII字符的简单方法如下:

    # the characters '¡' and '¢' are non-ASCII
    string = "hello, my name is ¢arl... ¡Hola!"
    
    all_ascii = ''.join(char for char in string if ord(char) < 128)
    

    这导致:

    >>> print(all_ascii)
    "hello, my name is arl... Hola!"
    

    您也可以这样做:

    ''.join(filter(lambda c: ord(c) < 128, string))
    

    但这比之前慢了30% char for char ... 方法