Python从字符串中删除分隔符

时间:2016-02-05 10:16:51

标签: python

我有2个相关问题/问题。

def remove_delimiters (delimiters, s):
    for d in delimiters:
        ind = s.find(d)
        while ind != -1:
            s = s[:ind] + s[ind+1:]
            ind = s.find(d)

    return ' '.join(s.split())


delimiters = [",", ".", "!", "?", "/", "&", "-", ":", ";", "@", "'", "..."]
d_dataset_list = ['hey-you...are you ok?']
d_list = []

for d in d_dataset_list:
    d_list.append(remove_delimiters(delimiters, d[1]))

print d_list

输出= 'heyyouare you ok'

  1. 删除分隔符时,避免将字符串组合在一起的最佳方法是什么?例如,输出为hey you are you ok

  2. ...可能有许多不同的序列,例如............等。如何实施某种形式的规则,如果更多只有一个.出现在彼此之后才能删除它?我想尝试避免在我的分隔符列表中对所有序列进行硬编码。三江源

2 个答案:

答案 0 :(得分:5)

您可以尝试这样的事情:

  1. 给定分隔符d,将它们连接到正则表达式

    >>> d = ",.!?/&-:;@'..."
    >>> "["+"\\".join(d)+"]"
    "[,\\.\\!\\?\\/\\&\\-\\:\\;\\@\\'\\.\\.\\.]"
    
  2. 使用此正则表达式使用re.split

    拆分字符串
    >>> s = 'hey-you...are you ok?'
    >>> re.split("["+"\\".join(d)+"]", s)
    ['hey', 'you', '', '', 'are you ok', '']
    
  3. 将所有非空片段重新加入

    >>> ' '.join(w for w in re.split("["+"\\".join(d)+"]", s) if w)
    'hey you are you ok'
    
  4. 此外,如果您只想删除所有非单词字符,则可以使用字符组\W而不是手动枚举所有分隔符:

    >>> ' '.join(w for w in re.split(r"\W", s) if w)
    'hey you are you ok'
    

答案 1 :(得分:0)

首先,使用替换函数(http://www.tutorialspoint.com/python/string_replace.htm)可以大大简化删除分隔符的功能

这有助于解决您的第一个问题。而不是仅删除它们,用空格替换,然后使用您已经使用的模式去掉空格(split()将连续的分隔符视为一个)

更好的功能就是:

def remove_delimiters (delimiters, s):
    new_s = s
    for i in delimiters: #replace each delimiter in turn with a space
        new_s = new_s.replace(i, ' ')
    return ' '.join(new_s.split())

回答你的第二个问题,我说是正常表达的时间

>>> import re
... ss = 'hey ... you are ....... what?'
... print re.sub('[.+]',' ',ss)
hey     you are         what?
>>>