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

2024-04-20 15:56:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的代码,我从中删除-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

Tags: to代码devrecomremoverelbt
3条回答

我想你认为dev.*意味着“dev后跟一个句点,后跟任何东西”,这就是Unix-like environment中命令行上的意思。你知道吗

在一个真正的正则表达式中,period不表示period,它表示“任意字符”,星号不表示“任意字符串”,它表示“最后一个模式,任意次数(包括零次)”。你知道吗

你想要什么

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

你的.*太宽了。如果我们(从您的示例中)假设-dev-rel后面可能只有一个纯数字版本号,那么请尝试以下操作:

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

看起来不需要正则表达式。只在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'

相关问题 更多 >