反复从字符串中删除字符

3
>>> split=['((((a','b','+b']
>>> [ (w[1:] if w.startswith((' ','!', '@', '#', '$', '%', '^', '&', '*', "(", ")", '-', '_', '+', '=', '~', ':', "'", ';', ',', '.', '?', '|', '\\', '/', '<', '>', '{', '}', '[', ']', '"')) else w) for w in split]
['(((a','b','b']

我希望得到 ['a', 'b', 'b']

我想创建一个重复函数来重复命令。我要清除所有以'('开头的内容,假设我的分割线更长,我也想清除所有单词前面的(((。我不使用replace,因为它会改变单词中间的'('

例如,如果'('在一个单词中间,比如'aa(aa',我不想改变它。


人们,楼主尝试了一些东西,展示了出来,并成功地解释了他们在做什么以及为什么要这样做。我真的看不出有任何理由对这个问题进行负评。 - Martijn Pieters
@MartijnPieters,我认为这次编辑对于它之前的样子应该有所帮助。 - Padraic Cunningham
@PadraicCunningham:我所做的只是格式化代码并稍微整理了一下语言。 - Martijn Pieters
1
@MartijnPieters,我没有dv,我只是在说在你编辑之前它是不可读的。 - Padraic Cunningham
1个回答

8

不需要重复表达,你没有使用正确的工具。你正在寻找str.lstrip()方法

[w.lstrip(' !@#$%^&*()-_+=~:\';,.?|\\/<>{}[]"') for w in split]

该方法将字符串参数视为一组字符,并执行与您在代码中尝试执行的完全相同的操作:如果左侧最左侧的字符是该集合的一部分,则重复删除它。有一个相应的str.rstrip(),用于从末尾删除字符,以及str.strip()从两端删除字符。演示:
>>> split=['((((a', 'b', '+b']
>>> [w.lstrip(' !@#$%^&*()-_+=~:\';,.?|\\/<>{}[]"') for w in split]
['a', 'b', 'b']

如果你确实需要重复一个表达式,你可以为此任务创建一个新的函数:

def strip_left(w):
    while w.startswith((' ','!', '@', '#', '$', '%', '^', '&', '*', "(", ")", '-', '_', '+', '=', '~', ':', "'", ';', ',', '.', '?', '|', '\\', '/', '<', '>', '{', '}', '[', ']', '"')):
        w = w[1:]
    return w

[strip_left(w) for w in split]

你的评论很棒。 - Bao Khanh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接