説明文に含まれるニコニコ動画のリンク記法を タグに置換する正規表現
テキスト中に含まれるニコニコ動画のリンク記法(動画 ID)をすべて <a> タグリンクに置換する Python 正規表現です。
sm[0-9]+ や mylist/[0-9]+ のような数値が付くリンク記法に対応。
import re adict = { 'sm': '<a href="http://www.nicovideo.jp/watch/\g<1>">\g<1></a>', 'nm': '<a href="http://www.nicovideo.jp/watch/\g<1>">\g<1></a>', 'lv': '<a href="http://live.nicovideo.jp/watch/\g<1>">\g<1></a>', 'sg': '<a href="http://seiga.nicovideo.jp/watch/\g<1>">\g<1></a>', 'im': '<a href="http://seiga.nicovideo.jp/seiga/\g<1>">\g<1></a>', 'co': '<a href="http://com.nicovideo.jp/community/\g<1>">\g<1></a>', 'ch': '<a href="http://ch.nicovideo.jp/channel/\g<1>">\g<1></a>', 'nw': '<a href="http://news.nicovideo.jp/watch/\g<1>">\g<1></a>', 'ap': '<a href="http://app.nicovideo.jp/app/\g<1>">\g<1></a>', 'nc': '<a href="http://www.niconicommons.jp/material/\g<1>">\g<1></a>', 'dw': '<a href="http://ichiba.nicovideo.jp/item/\g<1>">\g<1></a>', 'mylist/': '<a href="http://www.nicovideo.jp/\g<1>">\g<1></a>', 'clip/': '<a href="http://seiga.nicovideo.jp/\g<1>">\g<1></a>', 'user/': '<a href="http://www.nicovideo.jp/\g<1>">\g<1></a>', 'user/illust/': '<a href="http://seiga.nicovideo.jp/\g<1>">\g<1></a>', 'niconicommons.jp/user/': '<a href="http://www.\g<1>">\g<1></a>', } def optimizedHTML(html): prog = re.compile('(?P<nico>(' + '|'.join(map(re.escape, adict)) + ')\d+)') def one_xlat(match): matched_prefix = re.match('\D+', match.group(0)).group(0) # 'sm' など replacement = adict[matched_prefix] # 後方参照 \g<1> を含む置換文字列 return match.expand(replacement) # 後方参照 \g<1> を変換 return prog.sub(one_xlat, html)
- 変換前
前【sm15360840】 次【sm15410778】 マインクラフト関連→【mylist/25300150】単発実況等→【mylist/25300129】 生放送では前回のクイーンのワールドでプレイしてます【co1138127】
- 変換後
前【<a href="http://www.nicovideo.jp/watch/sm15360840">sm15360840</a>】 次【<a href="http://www.nicovideo.jp/watch/sm15410778">sm15410778</a>】 マインクラフト関連→【<a href="http://www.nicovideo.jp/mylist/25300150">mylist/25300150</a>】単発実況等→【<a href="http://www.nicovideo.jp/mylist/25300129">mylist/25300129</a>】 生放送では前回のクイーンのワールドでプレイしてます【<a href="http://com.nicovideo.jp/community/co1138127">co1138127</a>】