我有下面的代码,我从中删除-dev.*
和-rel.*
,但是当我有类似com-devices.lnx.1.0-dev
的东西时,它会从开头删除并输出com
,我希望它打印com-devices.lnx
,请参见下面的branch3…如何只从结尾删除dev.*?你知道吗
import re
chars_to_remove = ['-dev.*','-rel.*'] # modify char to remove here
def remove_char(s):
return re.sub("({})$".format('|'.join(chars_to_remove)), '', s)
branch1 = 'bt.lnx.2.1-dev.1.0'
branch2 = 'bt.lnx.2.1-rel.1.0'
branch3 = 'com-devices.lnx.1.0-dev'
print remove_char(branch1) # 'bt.lnx.2.1'
print remove_char(branch2) # 'bt.lnx.2.1'
print remove_char(branch3) # should print com-devices.lnx.1.0
我想你认为
dev.*
意味着“dev后跟一个句点,后跟任何东西”,这就是Unix-like environment中命令行上的意思。你知道吗在一个真正的正则表达式中,period不表示period,它表示“任意字符”,星号不表示“任意字符串”,它表示“最后一个模式,任意次数(包括零次)”。你知道吗
你想要什么
你的
.*
太宽了。如果我们(从您的示例中)假设-dev
和-rel
后面可能只有一个纯数字版本号,那么请尝试以下操作:看起来不需要正则表达式。只在
str.rsplit
上'-'
,将其限制为一次拆分:相关问题 更多 >
编程相关推荐