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

在python中修剪所有空白字符

  •  1
  • David542  · 技术社区  · 6 年前

    我在找这样的东西 TRIM() 在python中,但是 .strip() 不能做到这一点。举个例子:

    >>> s.strip()
    'Elvis Presley made his film debut in this tale of three brothers who, 
     while serving in the Confederate Army, steal a Union Army payroll. \xc2\xa0'
    
    >>> s2.strip()
    'Elvis Presley made his film debut in this tale of three brothers who, 
     while serving in the Confederate Army, steal a Union Army payroll.'
    
    >>> s.strip()==s2.strip()
    False
    

    我该如何完成上面的工作--修剪文本边缘的所有空白字符--从哪里可以得到 s.trim() == s2.trim() (而不是仅仅做一个恶作剧 s.strip('\xc2\xa0').strip() ?

    2 回复  |  直到 6 年前
        1
  •  2
  •   payne    6 年前

    由于您使用的是Python2.7,请首先将字符串转换为unicode,然后删除:

    s = unicode('test \xc2\xa0', "UTF-8")
    s.strip()
    

    产量:

    u'test'
    

    这将导致Python识别 \xc2\xa0 作为Unicode不间断空格字符,并对其进行适当的修剪。

    否则,Python会假设它是一个ASCII字符串,并且在该字符集中 \xc2 \xa0 不是空白。

        2
  •  0
  •   Woody1193 Nimmi Rashinika    6 年前

    我建议你用 replace

    s1 = s1.replace('\xc2', '').replace('\xa0', '')
    

    如果有大量可能要删除的字符,可以封装此逻辑:

    def replace_many(base_string, *to_remove):
        result = base_string
        for r in to_remove:
            result = result.replace(r, '')
        return result
    
    replace_many(s, '\xc2', '\xa0') == s2.strip()
    >>> True
    

    您还可以使用 reduce :

    # In Python 2
    result = reduce(lambda a, r: a.replace(r, ''), ['\xc2', '\xa0'], 
        initializer = base_string.strip())
    
    # In Python 3
    import functools
    result = functools.reduce(lambda a, r: a.replace(r, ''), ['\xc2', 'xa0'], 
        base_string.strip())