我试图在我的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
命令?
编辑:
我的问题不是关于我的正则表达式。输入String比我作为示例提供的字符串更复杂。问题是关于如何正确使用re.sub()和我使用的正则表达式:)
最佳答案
sed
s/-[a-z0-9]\{5\}$//
命令翻译为re.sub(r'-[a-z0-9]{5}$', '', s)
。
注意:
BRE POSIX间隔量词编写时没有转义符,\{5\}
=> {5}
s/<pattern>/<repl>/
表示将<pattern>
替换为<repl>
,并且等于re.sub('<pattern>', '<repl>', s, 1)
(由于sed命令中没有g
修饰符,因此将1
传递给re.sub
只能先替换一个,发生)。
修饰符在re.sub
中作为选项或标志传递,例如re.sub(r'-[a-z0-9]{5}$', '', s, flags=re.I)
(re.I
是不区分大小写的修饰符)。注意,由于默认情况下g
会替换所有出现的内容,因此无需使用re.sub
修饰符。
您可以在Python re
documentation中了解有关Python regex语法的更多信息。
关于python - Python sed正则表达式匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51474751/