69

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これを行うための正しい機能はありますか?

4

4 に答える 4

117

\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'...'必須ではありませんが、バックスラッシュをエスケープする必要がなくなり、おそらくコードが少し読みやすくなります。

于 2011-08-25T13:32:01.453 に答える
16

\1の代わりに使用し$1ます。

\number 同じ番号のグループの内容に一致します。

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

于 2011-08-25T13:31:55.433 に答える
5

置換部分については、Python は\1sed と vi の方法を使用しますが、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'
>>> 
于 2011-08-25T13:35:52.330 に答える