【发布时间】:2018-12-30 16:00:38
【问题描述】:
我试图在我的 Python 脚本中使用 re.sub() 来删除一些字符串。
我使用的sed 命令是(在 Linux 上):
echo "helloworld-5b5cf484-g582f" | sed 's/-[a-z0-9]\{5\}$//' | sed 's/-[0-9]\{10\}$//' | sed 's/-[a-z0-9]\{8,10\}$//'
这将输出helloworld。
现在,使用 Python,我尝试为第一个 sed 组执行此操作:
newstring = re.sub(r'(s/-[a-z0-9]\{5\}$//)', r'\1', 'helloworld-5b5cf484-g582f')
但它只输出副本,即helloworld-5b5cf484-g582f
我怎样才能执行这样的sed 命令?
编辑:
我的问题不在于我的正则表达式。输入字符串比我作为示例提供的更复杂。问题是关于如何正确使用 re.sub() 和我使用的正则表达式:)
【问题讨论】:
-
您是否要删除最后两个连字符分隔的块?试试
re.sub(r'(?:-[^-]*){2}$', '', s)。 seds/-[a-z0-9]\{5\}$//命令被翻译为re.sub(r'-[a-z0-9]{5}$', '', s) -
为什么不在第一个
-之前搜索所有内容?否则请说明拆分的时间和地点。 -
取出
s/和//,它们不是正则表达式的一部分。 -
我的问题不在于我的正则表达式。输入字符串比我作为示例提供的更复杂。问题是关于如何正确使用
re.sub()和我使用的正则表达式:) -
@TomZych 仍然给我一份我输入的副本:
newstring = re.sub('-[a-z0-9]\{5\}$', '', 'helloworld-5b5cf484-g582f')
标签: python regex python-3.x sed