こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

pythonで実体参照文字を直す方法

pythonで以下のコードを使って実体参照、文字参照を直しているのですが「~」
など特定の文字がうまく直されませんどういうことでしょうか? python2.7です。

下のコードで4~6人を直すと46人になる。
文字参照とか実体参照とかhtmlentitydefsの使い方も詳しく分かってません。
その辺も総合して教えていただけるとありがたいです。

def sansyounaosi(text):
# 正規表現のコンパイル
reference_regex = re.compile(u'&(#x?[0-9a-f]+|[a-z]+);', re.IGNORECASE)
num16_regex = re.compile(u'#x\d+', re.IGNORECASE)
num10_regex = re.compile(u'#\d+', re.IGNORECASE)

result = u''
g = 0
while True:
# 実体参照 or 文字参照を見つける
match = reference_regex.search(text, g)
if match is None:
result += text[g:]
break

result += text[g:match.start()]
g = match.end()
name = match.group(1)

# 実体参照
if name in htmlentitydefs.name2codepoint.keys():
result += unichr(htmlentitydefs.name2codepoint[name])
# 文字参照
elif num16_regex.match(name):
# 16進数
result += unichr(int(u'0'+name[1:], 16))
elif num10_regex.match(name):
# 10進数
result += unichr(int(name[1:]))
return result

投稿日時 - 2012-09-07 00:40:04

QNo.7684611

すぐに回答ほしいです

質問者が選んだベストアンサー

Pythonはインデントが大事なのですが、このQAではスペースやタブを省略するので、インデントが崩れます。
他の文字(全角空白等)で代用してください。

とりあえず、
> num16_regex = re.compile(u'#x\d+', re.IGNORECASE)
\dは[0-9]なので、16進数にマッチしません。

投稿日時 - 2012-09-07 03:45:21

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)