我试图编写代码,如果字符串位于单词的中间而不是单词之间,则会删除字符串中的短划线。如果破折号出现在换行符之前或之后,这也将删除换行符。根据此分配的规则,需要删除的破折号将始终与换行符,空格或其他破折号相邻。如果破折号左边的字符是字母而右边的字符是字母,则不应删除它。
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"。但是,我的代码无效。有人可以帮忙吗?
答案 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']