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