簡體   English   中英

re.sub 替換為匹配的內容

[英]re.sub replace with matched content

試圖掌握 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甚至是執行此操作的正確功能嗎?

只需使用\\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'...' ) 用於正則表達式。 它不是強制性的,但不需要轉義反斜杠,可以說使代碼更具可讀性。

使用\\1而不是$1

\\number 匹配同號組的內容。

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

對整個匹配值的反向引用是\\g<0> ,請參閱re.sub文檔

反向引用\\g<0>替換 RE 匹配的整個子字符串。

請參閱Python 演示

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

對於替換部分,Python 像 sed 和 vi 那樣使用\\1而不是像 Perl、Java 和 Javascript(以及其他)那樣使用$1 此外,因為\\1在常規字符串中插入字符 U+0001,所以您需要使用原始字符串或 \\escape 它。

Python 3.2 (r32:88445, Jul 27 2011, 13:41:33) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> method = 'images/:id/huge'
>>> import re
>>> re.sub(':([a-z]+)', r'<span>\1</span>', method)
'images/<span>id</span>/huge'
>>> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM