2

仮定:

s = '<A HREF="http://www.google.com" ID="test">blah</A>'

URLの前に「url:」を追加したいので、試しました:

s = re.sub(r'href="([\w:/.]+)"', "url: " + r'\1', s, re.I)

しかし、これは変わりませんs

4

2 に答える 2

4

re.I位置が間違っています (count引数として解釈されています)。

ドキュメントから:

re.sub(pattern, repl, string, count=0, flags=0)
                              ^^^^^    ^^^^^

試す:

In [27]: re.sub(r'href="([\w:/.]+)"', "url: " + r'\1', s, flags=re.I)
Out[27]: '<A url: http://www.google.com ID="test">blah</A>'
于 2013-06-16T17:24:06.673 に答える
2

他の答えは技術的には絶対に正しいですが、そこに記載されていることは望んでいないと思います。

代わりに、一致オブジェクトを使用したい場合があります。

m = re.search(r'href="([\w:/.]+)"', s, re.I)
print m.expand(r"url: \1")

その結果

url: http://google.com

<A前後なしでID="test">blah</A>

(これらの置換をさらに行いたい場合は、正規表現をコンパイルして再利用することもできます。

r = re.compile(r'href="([\w:/.]+)"', re.I)
ex = lambda st: r.search(st).expand(r"url: \1")
print ex('<A HREF="http://www.google.com" ID="test">blah</A>')
print ex('<A HREF="http://www.yahoo.com" ID="test">blah</A>')
# and so on.

ただし、実際に HTML をその周りに保持したい場合は、先読み式と後読み式を使用する必要があります。

re.sub(r'(?<=href=")([\w:/.]+)(?=")', "url: " + r'\1', s, flags=re.I)
# -> '<A HREF="url: http://www.google.com" ID="test">blah</A>'

または単に省略されたものを繰り返すことによって:

re.sub(r'href="([\w:/.]+)"', r'href="url: \1"', s, flags=re.I)
# -> '<A href="url: http://www.google.com" ID="test">blah</A>'
于 2013-06-16T17:32:20.137 に答える