如何清理除某些字符之外的字符串

时间:2017-03-29 23:52:19

标签: python string python-3.x

我想清理下面的字符串,但只删除\n\rextra spaces但不删除撇号(')和其他字符,例如dash {{ 1}}和冒号(-)

现在我正在使用此代码,但它删除了所有特殊字符。

(:)

我该怎么做?

3 个答案:

答案 0 :(得分:2)

您可以使用filter()strip()删除\n\t\rextra 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