1

ウィキペディアの記事から言語リストを抽出しようとしています: List_of_programming_languages_by_type. いくつかの行があります:

  • [[Ada (プログラミング言語)|Ada]] (多目的言語)
  • [[Afnix (プログラミング言語)|Afnix]] – データへの同時アクセスは自動的に保護されます (以前は「アレフ」と呼ばれていましたが、「アレフ」とは関係ありません)
  • [[Cilk]] – コンカレント [[C (プログラミング言語)|C]]

複数の [[ ]] ブロックを含む行 (例では Click language を含む行) を除いて、ほとんどすべての行が正しく解析されます。解析コード:

for line in lines:
    lang = re.search('^\*+\s*(\[\['
                    '((?P<wiki_link>.+?)(\|))?'
                     '(?P<lang_name>.+?)' 
                     '\]\])', line)
    if lang:
        print lang.groupdict()

そして出力:

{'wiki_link': u'Ada (programming language)', 'lang_name': u'Ada'}
{'wiki_link': u'Afnix (programming language)', 'lang_name': u'Afnix'}
{'wiki_link': u'Cilk]] &ndash; a concurrent [[C (programming language)', 'lang_name': u'C'}

複数の [[ ]] ブロックを 1 行で管理するにはどうすればよいですか?

PS 期待される結果:

{'wiki_link': None, 'lang_name': u'Clik'}
4

1 に答える 1