我正在将我的bash代码转换为python代码。
现在我想在bash中创建一个具有$ {variable%pattern}功能的函数;从字符串末尾删除最短匹配的模式,
例如,我希望delete_tail('_ usr_home_you_file.ext.tar.oz',r'。')会产生'_usr_home_you_file.ext.tar'
我在下面创建了python函数,
import re
def delete_tail(word,pattern):
return re.sub('{0}.*?$'.format(pattern), '', word)
然而,它会删除最长匹配的模式,如下所示。
word='_usr_home_you_file.ext.tar.oz'
delete_shortest_match_tail=delete_tail(word,r'\.')
print("word = {0}".format(word))
print("delete_shortest_match_tail = {0}". format(delete_shortest_match_tail))
输出:
delete_shortest_match_tail = _usr_home_you_file
如何按照我的预期制作一个从字符串末尾删除最短匹配模式的函数?
非常感谢。
答案 0 :(得分:1)
您更愿意在模式前面搜索字符串,而不是替换模式。正则表达式始终从左到右查看,所有匹配都按此顺序报告。我们不能简单地反转字符串,因为这会搞乱RegEx模式。因此,我们无法使用sub
,但是使用空字符串替换某些内容与删除相同,或者获取字符串的其余部分。这基本上就是这个解决方案的作用。它会搜索您的结果,只是省略您不想要的部分。
def removeFromEnd(pattern, target):
m = re.match("(.*)" + pattern + ".*$", target)
if m:
return m.group(0)
else:
return target
>>> removeFromEnd(“\。”,“foo.tar.gz”)
'foo.tar'