在Python中删除字符串中的破折号

时间:2017-10-30 23:31:19

标签: python python-3.x

我试图编写代码,如果字符串位于单词的中间而不是单词之间,则会删除字符串中的短划线。如果破折号出现在换行符之前或之后,这也将删除换行符。根据此分配的规则,需要删除的破折号将始终与换行符,空格或其他破折号相邻。如果破折号左边的字符是字母而右边的字符是字母,则不应删除它。

def remove_dashes(string):
    lst = list(string)
    for i in range(len(lst)-1):
        if lst[i] == '-' and lst[i+1] == (' ' or '-' or '\n') or lst[i-1] == (' ' or '-' or '\n'):
            lst[i] = ''
            if lst[i+1] == '\n':
                lst[i+1] = ''
            elif lst[i-1] == '\n':
                lst[i-1]
        elif lst[i] == '-' and i == len(lst)-1 and lst[i-1] == (' ' or '-' or '\n'):
            lst[i] = ''
            if lst[i-1] == '\n':
                lst[i-1] = ''
    return "".join(lst)

所以在理论上" rem- \ nove the-\ nse da \ n-shes - "将返回"删除这些短划线"没有任何换行符。但是"不是 - 这些破折号"只会返回" not-these-dashes"。但是,我的代码无效。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

您可以使用re.sub

import re
s = ["rem-\nove the-\nse da\n-shes--", "not-these-dashes"]
new_data = [re.sub("-\n|--|\n-", '', i) for i in s]

输出:

['remove these dashes', 'not-these-dashes']