[英]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.