如何只从字符串的末尾删除字符?

时间:2016-12-10 02:59:17

标签: python

我有以下代码,我从中删除-dev.*-rel.*,但是当我有com-devices.lnx.1.0-dev这样的内容时,它会从开头删除并输出{{1}我希望它打印com的位置,请参阅下面的branch3 ...如何从最后删除dev。*?

com-devices.lnx

3 个答案:

答案 0 :(得分:3)

看起来你需要一个正则表达式。只需str.rsplit '-',将其限制为一个分割:

>>> branch1 = 'bt.lnx.2.1-dev.1.0'
>>> branch2 = 'bt.lnx.2.1-rel.1.0'
>>> branch3 = 'com-devices.lnx.1.0-dev'
>>> branch1.rsplit('-', 1)[0]
'bt.lnx.2.1'
>>> branch2.rsplit('-', 1)[0]
'bt.lnx.2.1'
>>> branch3.rsplit('-', 1)[0]
'com-devices.lnx.1.0'

答案 1 :(得分:1)

我认为您认为dev.*表示“dev后跟一段时间后跟任何东西” - 这就是Unix-like environment中命令行上的含义

在一个真实的正则表达式中,句点并不意味着句号,它表示“任何字符”,而星号并不表示“任何字符串”,它表示“最后一个模式,任意次数(包括零)次)”。

你想要

pat = re.compile('-(dev|rel)\..*$')
def remove_suffix(x):
  return pat.sub("", x)

答案 2 :(得分:0)

您的.*过于宽泛。如果我们假设(从您的示例中)-dev-rel只能跟一个纯数字版本号,那么试试这个:

chars_to_remove = ['-dev[0-9.]*','-rel[0-9.]*']