簡體   English   中英

如何只刪除字符串末尾的字符?

[英]how to remove characters only from the end of a string?

我有以下代碼可從結尾刪除-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

看來您不需要正則表達式。 只需在'-'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'

我認為您認為dev.*意思是“ dev之后是句點,然后是任何東西”,這就是在類似Unix的環境中 的命令行上的意思。

在真實的正則表達式中,句點不表示句點,表示“任何字符”,星號表示不表示“任何字符串”,表示“最后一個模式,任何次數(包括零次)” 。

你要

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

您的.*太寬。 如果我們假設(根據您的示例) -dev-rel只能跟一個僅數字的版本號,那么請嘗試以下操作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM