我试图在我的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/

10-17 01:45