我想清理下面的字符串,但只删除\n
,\r
和extra spaces
但不删除撇号(')
和其他字符,例如dash {{ 1}}和冒号(-)
。
现在我正在使用此代码,但它删除了所有特殊字符。
(:)
我该怎么做?
答案 0 :(得分:2)
您可以使用filter()
和strip()
删除\n
,\t
,\r
和extra whitespaces
,同时保留其余字符,像这样:
string = "\n\n\r\n Scott Hibb's Amazing Whisky Grilled Baby Back Ribs\r\n \n\n\n\n"
print(' '.join(filter(None, string.strip().split())))
这将导致:
Scott Hibb's Amazing Whisky Grilled Baby Back Ribs
答案 1 :(得分:1)
接受的答案很棒,但是如果你想要一个稍微更通用的解决方案,允许你指定你仍然想要删除的显式字符集,请在过滤器中添加一个lambda函数,如下所示。
>>> y = "\n\n\r\n Scott Hibb's Amazing Whisky Grilled Baby Back Ribs\r\n \n\n\n\n"
>>> ' '.join(filter(lambda x: x not in ['\n', '\r'], y).strip().split())
"Scott Hibb's Amazing Whisky Grilled Baby Back Ribs"
请注意,对于您的示例,在lambda中明确指定\n
和\r
是过度的,因为strip()将\n
和\r
视为空格,但如果您想要删除其他字符,那么这是一个合理的方法。例如,您可以删除多余的空白字符,删除\n
和\r
,并删除所有标准元音(a,e,i,o,u)。
>>> y = "\n\n\r\n Scott Hibb's Amazing Whisky Grilled Baby Back Ribs\r\n \n\n\n\n"
>>> ' '.join(filter(lambda x: x.lower() not in ['a', 'e', 'i', 'o', 'u', '\r'], y).strip().split())
"Sctt Hbb's mzng Whsky Grlld Bby Bck Rbs"
答案 2 :(得分:0)
使用字符类,例如[abc]
匹配a,b或c