gpt4 book ai didi

python - 如何通过python的re模块从字符串末尾删除最短的匹配模式?

转载 作者:太空宇宙 更新时间:2023-11-03 14:53:35 25 4
gpt4 key购买 nike

我正在将 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

如何创建一个函数,按照我上面的预期从字符串末尾删除最短的匹配模式?

非常感谢。

最佳答案

您宁愿搜索模式前面的字符串,而不是搜索模式来替换它。正则表达式始终从左到右查找,并且所有匹配项都按该顺序报告。我们不能简单地反转字符串,因为这会扰乱正则表达式模式。因此,我们不能使用 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'

关于python - 如何通过python的re模块从字符串末尾删除最短的匹配模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45747436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com