Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python从字符串中删除分隔符_Python - Fatal编程技术网

Python从字符串中删除分隔符

Python从字符串中删除分隔符,python,Python,我有两个相关问题 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 = [",", ".", "!", "

我有两个相关问题

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
输出=
“你好吗”

  • 删除分隔符时,避免字符串组合在一起的最佳方法是什么?例如,输出是
    嘿,你还好吗

  • 可能有许多不同的
    ..
    序列,例如
    ..
    等。如何执行某种形式的规则,如果多个
    相继出现,如何将其删除?我希望尽量避免硬编码分隔符列表中的所有序列。谢谢


  • 您可以尝试以下方法:

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

    >>> d = ",.!?/&-:;@'..."
    >>> "["+"\\".join(d)+"]"
    "[,\\.\\!\\?\\/\\&\\-\\:\\;\\@\\'\\.\\.\\.]"
    
  • 使用此正则表达式将字符串拆分为
    re.Split

    >>> s = 'hey-you...are you ok?'
    >>> re.split("["+"\\".join(d)+"]", s)
    ['hey', 'you', '', '', 'are you ok', '']
    
  • 将所有非空片段重新连接在一起

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

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

    因此,首先,通过使用replace函数()可以大大简化删除分隔符的函数

    这将有助于解决您的第一个问题。不只是删除它们,而是替换为一个空格,然后使用您已经使用过的模式除去空格(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?
    >>> 
    

    您的分隔符列表中只有一个点,但是您问我们如何删除两个或多个点。到底是哪一个,单点是否应该保留?