Python:从字符串末尾删除下划线

9
大家好!我正在尝试调试某人的代码,已经找到了问题。程序循环遍历一个字符串数组并计算某些末尾。问题是有些字符串以“_”结尾,因此计数错误。我想使用正则表达式,但我还没有足够的经验。能有人帮帮我吗?
我想遍历该数组,并针对每个字符串检查其是否以“_”结尾,并修剪掉所有这些_,然后再将它们放回数组中!
更新
感谢rstrip建议!我已经尝试编写适用于我的数据的代码,但还没有成功...
data_trimmed = []
        for x in data:
            x.rstrip('_')
            data_trimmed.append(x)

        print(data_trimmed)

但仍然返回:['Anna__67_______', 'Dyogo_3__', 'Kiki_P1_', 'BEN_40001__', .... ]

6
你可以使用 rstrip('_') 去除字符串末尾的下划线,例如 some_string.rstrip('_') - EdChum
这将移除字符串中所有的 _ 还是只有结尾的一个? - Anna Jeanine
在最后,试一下:'__as_das___'.rstrip('_') - EdChum
Ed说的没错。没有必要测试尾随下划线,只需在每行上调用.rstrip即可。它可以以C速度测试指定字符,比您使用显式Python测试更快。 - PM 2Ring
你可以使用列表推导式修改列表中的所有字符串,参见我的更新答案。 - EdChum
1
x.rstrip('_') 不会修改 x:Python 字符串是 不可变 的,因此字符串方法无法修改原始字符串,它们必须返回一个新的字符串。另外,请参阅 abarnert 的 这个优秀答案 - PM 2Ring
2个回答

10
你可以使用rstrip('_')来删除结尾的下划线:
In [15]:
'__as_das___'.rstrip('_')

Out[15]:
'__as_das'

因此,您可以看到任何前导下划线和字符串中间的下划线都不受影响,请参阅文档:https://docs.python.org/2/library/string.html#string-functions

为了回答您更新后的问题,您可以使用列表推导式来更新列表中的每个字符串:

In [18]:
a = ['Anna__67_______', 'Dyogo_3__', 'Kiki_P1_', 'BEN_40001__']
a = [x.rstrip('_') for x in a]
a

Out[18]:
['Anna__67', 'Dyogo_3', 'Kiki_P1', 'BEN_40001']

我已经尝试了这段代码:data_trimmed = [] for x in data: x.rstrip('_') data_trimmed.append(x) 但它对我不起作用 :-( - Anna Jeanine
s_trimmed.append(x.rstrip(''))应翻译为:s_trimmed.append(x.rstrip(''))。 - Mixone
2
@AnnaJeanine 你需要将值重新初始化为 x = x.rstrip('_')。你也可以将整个逻辑写成:data_trimmed = [x.rstrip('_') for x in data] - Moinuddin Quadri
太棒了!非常感谢您的快速且简单明了的回答! - Anna Jeanine

4
使用字符串的rstrip方法可以去掉不需要的_
s = 'anything__'
s = s.rstrip('_') # s becomes 'anything'

正则表达式对于这个问题有些过度了,可以按照以下方式完成。
import re
s = 'anything__'
s = re.sub('_+$', '', s)  # s becomes 'anything'

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