Ich möchte Daten aus dem Wiki-Link extrahieren, der von der mwparserfromhell-Bibliothek zurückgegeben wird. Ich möchte zum Beispiel die folgende Zeichenfolge analysieren:
[[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]].]]
Wenn ich das Zeichen |
分割字符串,则它不起作用,因为图像描述中也有一个使用 |
的链接: [[玛丽亚·斯克沃多夫斯卡-居里博物馆|出生地]]
verwende.
Ich habe Regex verwendet, um zunächst alle Links in der Zeichenfolge zu ersetzen und sie dann aufzuteilen. Es funktioniert (in diesem Fall), fühlt sich aber nicht sauber an (siehe Code unten). Gibt es eine bessere Möglichkeit, Informationen aus einer solchen Zeichenfolge zu extrahieren?
import 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
Attribut.
title
返回链接的标题:file:warszawa, ul。弗雷塔16 20170516 002.jpg
text
返回链接的其余部分:thumb|upright=1.18|[[maria skłodowska-curie museum|birthplace]] 玛丽·居里 (marie curie),地址:16 freta street,[[华沙]],[[波兰]]。
Diese werden als wikicode
Objekte zurückgegeben.
Da der eigentliche Text immer das letzte Fragment ist, müssen Sie zunächst die anderen Fragmente mithilfe des folgenden regulären Ausdrucks finden:
([^[]|]*|)+
(
)
: Gruppe
[^[]|]*
: 0 oder mehr Zeichen, bei denen es sich nicht um eckige Klammern oder vertikale Balken handelt |
: Textpipeline+
: 1 oder mehr Alles andere vom letzten übereinstimmenden Endindex bis zum Ende der Zeichenfolge ist das letzte 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]].'
Das obige ist der detaillierte Inhalt vonWie extrahiere ich Daten aus Wiki-Links?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!