【问题标题】:Cleaning away symbols/whitespace efficiently有效地清除符号/空白
【发布时间】:2016-09-15 08:10:22
【问题描述】:

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

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

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

编辑: 抱歉,我应该注意并非所有字符串都具有“x,y”格式。还应清理诸如“-- New York City--”或“* Texas *”之类的字符串。

# 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)

【问题讨论】:

  • "-- New York City --" 会输出什么?
  • 你是如何替换:) memphis , tn (:中的空格的?
  • 啊,是的,我在删除特殊字符后再次使用 .strip() 。对不起。
  • str.strip 接受一串字符并以任意顺序将它们剥离,例如:"asdfdsas hello fdsafsdf".strip("asdf") -> ' hello '

标签: python regex string replace data-cleaning


【解决方案1】:

你可以使用

','.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))

【讨论】:

  • if len(y)>0 可以简化为 if y,因为零长度序列的布尔值是 False,任何包含内容的序列都是 True。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-12
  • 1970-01-01
  • 1970-01-01
  • 2011-01-15
  • 2011-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多