Je souhaite extraire des données du lien wiki renvoyé par la bibliothèque mwparserfromhell. Par exemple, je souhaite analyser la chaîne suivante :
[[file:warszawa, ul. freta 16 20170516 002.jpg|thumb|upright=1.18|[[maria skłodowska-curie museum|birthplace]] of marie curie, at 16 freta street, in [[warsaw]], [[poland]].]]
Si j'utilise le personnage |
分割字符串,则它不起作用,因为图像描述中也有一个使用 |
的链接: [[玛丽亚·斯克沃多夫斯卡-居里博物馆|出生地]]
.
J'ai utilisé regex pour d'abord remplacer tous les liens de la chaîne, puis la diviser. Cela fonctionne (dans ce cas), mais ne semble pas propre (voir le code ci-dessous). Existe-t-il une meilleure façon d’extraire des informations d’une chaîne comme celle-ci ?
attributimport re wiki_code = "[[File:Warszawa, ul. Freta 16 20170516 002.jpg|thumb|upright=1.18|[[Maria Skłodowska-Curie Museum|Birthplace]] of Marie Curie, at 16 Freta Street, in [[Warsaw]], [[Poland]].]]" # Remove [[File: at the begining of the string prefix = "[[File:" if (wiki_code.startswith(prefix)): wiki_code = wiki_code[len(prefix):] # Remove ]] at the end of the string suffix = "]]" if (wiki_code.endswith(suffix)): wiki_code = wiki_code[:-len(suffix)] # Replace links with their link_pattern = re.compile(r'\[\[.*?\]\]') matches = link_pattern.findall(wiki_code) for match in matches: content = match[2:-2] arr = content.split("|") label = arr[-1] wiki_code = wiki_code.replace(match, label) print(wiki_code.split("|"))
.filter_wikilinks()
返回的链接是 wikilink
类,该类具有 title
和 text
.
title
返回链接的标题:file:warszawa, ul。弗雷塔16 20170516 002.jpg
text
返回链接的其余部分:thumb|upright=1.18|[[maria skłodowska-curie museum|birthplace]] 玛丽·居里 (marie curie),地址:16 freta street,[[华沙]],[[波兰]]。
Ceux-ci sont renvoyés sous forme d'objets wikicode
.
Puisque le texte réel est toujours le dernier fragment, vous devez d'abord trouver les autres fragments en utilisant l'expression régulière suivante :
([^[]|]*|)+
(
)
: groupe
[^[]|]*
: 0 caractères ou plus qui ne sont pas des crochets ou des barres verticales |
: pipeline de texte+
: 1 ou plus Tout le reste, depuis le dernier index de fin correspondant jusqu'à la fin de la chaîne, constitue le dernier fragment.
>>> import mwparserfromhell >>> import re >>> wikitext = mwparserfromhell.parse('[[File:Warszawa, ul. Freta 16 20170516 002.jpg|thumb|upright=1.18|[[Maria Skłodowska-Curie Museum|Birthplace]] of Marie Curie, at 16 Freta Street, in [[Warsaw]], [[Poland]].]]') >>> image_link = wikitext.filter_wikilinks()[0] >>> image_link '[[File:Warszawa, ul. Freta 16 20170516 002.jpg|thumb|upright=1.18|[[Maria Skłodowska-Curie Museum|Birthplace]] of Marie Curie, at 16 Freta Street, in [[Warsaw]], [[Poland]].]]' >>> image_link.title 'File:Warszawa, ul. Freta 16 20170516 002.jpg' >>> text = str(image_link.text) >>> text 'thumb|upright=1.18|[[Maria Skłodowska-Curie Museum|Birthplace]] of Marie Curie, at 16 Freta Street, in [[Warsaw]], [[Poland]].' >>> other_fragments = re.match(r'([^\[\]|]*\|)+', text) >>> other_fragments <re.Match object; span=(0, 19), match='thumb|upright=1.18|'> >>> other_fragments.span(0)[1] 19 >>> text[19:] '[[Maria Skłodowska-Curie Museum|Birthplace]] of Marie Curie, at 16 Freta Street, in [[Warsaw]], [[Poland]].'
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!