有效地清除符号/空白

时间:2016-05-18 17:25:47

标签: python regex string replace data-cleaning

我有"- memphis , tn! ""~~~memphis,tn"":) memphis , tn (:"". - memphis,tn - .""memphis tn?"等字符串。我想清理每个字符串,使每个字符串变为"memphis,tn"。目前,我使用下面的代码,但有更有效的方法吗?也许使用正则表达式?

请注意,我目前遇到的问题是特殊字符的排序会影响最终结果。例如,". - memphis,tn - ."给出正确的结果,而"- . memphis,tn . -"则没有。这不是预期的。如果它可以作为副作用修复,那就太棒了!

字符串是纯ASCII,我可能想要删除比下面更多的特殊字符。

修改 对不起,我应该注意,并非所有字符串都包含" x,y"格式。还有诸如" - 纽约市 - "等字符串。或" *德克萨斯*"应该清理干净。

# remove emoticons
smileys = [":)",":\\",":(",";)",
           "(:","\\:","):","(;"]
for s in smileys:
    loc = loc.replace(s, '')

# cleaning whitespace uses
loc = ' '.join(loc.split())
loc = loc.strip()
loc = loc.replace(' ,', ',')
loc = loc.replace(', ', ',')
loc = loc.replace(' .', '.')
loc = loc.replace('. ', '.')

# clean special symbols off the sides
symbols = '.,!-#~*^?@" '
loc = loc.strip(symbols)

1 个答案:

答案 0 :(得分:3)

您可以使用

','.join(y for y in re.split("[- ,!~?]", x) if y)
                                ^^
                                ||
                    List all the symbols here

Python代码

y = ["- memphis , tn! ", "~~~memphis,tn", ":) memphis , tn (:", ". - memphis,tn - .", "memphis tn?", ". - memphis,tn - .", "- . memphis,tn . -"]

for x in y:
    print(','.join(y for y in re.split("[- ,!~?:;)(.]", x) if y))

<强> Ideone Demo

如果要删除除字母数字以外的任何符号,可以使用

print(','.join(y for y in re.split("_|[^\w]", x) if y))