re.sub用匹配的内容替换

问题描述 投票:0回答:4
试图在Python中使用正则表达式,我试图输出一些在URL中突出显示的HTML。我的输入是

images/:id/size

我的输出应为
images/<span>:id</span>/size

如果我在javascript
中这样做

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返回正确的结果而不是

$1
re.sub

甚至正确执行此操作的功能是否正确?

    
simply使用

python regex python-re
4个回答
144
投票

而不是$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'...'

)用于正则表达式。这不是强制性的,而是消除了逃脱后斜线的需要,可以说使代码更可读。

对整个匹配值的反向表示为
\g<0>

,请参见

21
投票
re.sub

文档:

反向注册
\g<0>
替换在整个子字符串中与re.

相匹配。

请参阅

Pythondemo

import re method = 'images/:id/huge' print(re.sub(r':[a-z]+', r'<span>\g<0></span>', method)) # => images/<span>:id</span>/huge

如果您需要执行案例不敏感的搜索,请添加flag=re.I

re.sub(r':[a-z]+', r'<span>\g<0></span>', method, flags=re.I)

    

使用
\1

18
投票
$1

  
Umber匹配相同数字组的内容。

http://docs.python.org/library/re.html#regular-expression-syntax

对于替换部分,Python使用sed和vi的方式,not

perl,java和javaScript(等)的方式。 此外,由于

7
投票
在常规字符串中以u+0001的角色插值,因此您需要使用原始字符串或scape。

$1

    
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.