在python中对所有空白字符进行TRIM

时间:2018-09-20 21:25:06

标签: python

我正在python中寻找类似TRIM()的东西,但是.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 个答案:

答案 0 :(得分:2)

由于您使用的是Python 2.7,请先将您的字符串转换为unicode,然后剥离:

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

产量:

u'test'

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

否则,Python会假定它是一个ASCII字符串,并且其中的字符集\xc2\xa0不是空格。

答案 1 :(得分:0)

我建议您使用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())