一尘不染

Python re.sub用匹配的内容替换

python

为了掌握Python中的正则表达式,我试图输出一些在URL中突出显示的HTML。我的输入是

images/:id/size

我的输出应该是

images/<span>:id</span>/size

如果我用Java语言执行此操作

method = 'images/:id/size';
method = method.replace(/\:([a-z]+)/, '<span>$1</span>')
alert(method)

我得到了期望的结果,但是如果我在Python中这样做

>>> method = 'images/:id/huge'
>>> re.sub('\:([a-z]+)', '<span>$1</span>', method)
'images/<span>$1</span>/huge'

我没有,如何让Python返回正确的结果而不是$1re.sub这样做是否正确?


阅读 302

收藏
2021-01-20

共1个答案

一尘不染

只需使用\1代替$1

In [1]: import re

In [2]: method = 'images/:id/huge'

In [3]: re.sub(r'(:[a-z]+)', r'<span>\1</span>', method)
Out[3]: 'images/<span>:id</span>/huge'

另请注意,将原始字符串r'...')用于正则表达式。它不是强制性的,但消除了转义反斜杠的需要,可以说使代码更具可读性。

2021-01-20