Saya ingin mengekstrak data daripada pautan wiki yang dikembalikan oleh perpustakaan mwparserfromhell. Sebagai contoh, saya ingin menghuraikan rentetan berikut:
[[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]].]]
Jika saya menggunakan watak |
分割字符串,则它不起作用,因为图像描述中也有一个使用 |
的链接: [[玛丽亚·斯克沃多夫斯卡-居里博物馆|出生地]]
.
Saya menggunakan regex untuk menggantikan semua pautan dalam rentetan dahulu dan kemudian membelahnya. Ia berfungsi (dalam kes ini), tetapi tidak berasa bersih (lihat kod di bawah). Adakah terdapat cara yang lebih baik untuk mengekstrak maklumat daripada rentetan seperti ini?
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
atribut.
title
返回链接的标题:file:warszawa, ul。弗雷塔16 20170516 002.jpg
text
返回链接的其余部分:thumb|upright=1.18|[[maria skłodowska-curie museum|birthplace]] 玛丽·居里 (marie curie),地址:16 freta street,[[华沙]],[[波兰]]。
Ini dikembalikan sebagai wikicode
objek.
Memandangkan teks sebenar sentiasa serpihan terakhir, anda perlu mencari serpihan lain terlebih dahulu menggunakan ungkapan biasa berikut:
([^[]|]*|)+
(
)
: kumpulan
[^[]|]*
: 0 atau lebih aksara yang bukan kurungan segi empat sama atau bar menegak |
: saluran paip teks+
: 1 atau lebih Segala perkara lain daripada indeks akhir dipadankan terakhir hingga hujung rentetan ialah serpihan terakhir.
>>> 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]].'
Atas ialah kandungan terperinci Bagaimana untuk mengekstrak data daripada pautan wiki?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!