Python regex per la ricerca dei contenuti dei collegamenti di markup MediaWiki
Domanda
Se ho alcuni file XML contenenti elementi come il seguente markup mediawiki:
" ... raccolti nel XII secolo, di cui [[Alessandro Magno]] fu il eroe, e in cui era rappresentato, un po 'come gli inglesi [[King Arthur | Arthur]] "
quali sarebbero gli argomenti appropriati per qualcosa del genere:
re.findall ([[__? __]], article_entry)
Sto inciampando un po 'nel fuggire dalle doppie parentesi quadre e ottenere il collegamento corretto per il testo come: [[Alexander of Paris | poeta di nome Alexander]]
Soluzione
Ecco un esempio
import re
pattern = re.compile(r"\[\[([\w \|]+)\]\]")
text = "blah blah [[Alexander of Paris|poet named Alexander]] bldfkas"
results = pattern.findall(text)
output = []
for link in results:
output.append(link.split("|")[0])
# outputs ['Alexander of Paris']
Versione 2, inserisce di più nella regex, ma di conseguenza cambia l'output:
import re
pattern = re.compile(r"\[\[([\w ]+)(\|[\w ]+)?\]\]")
text = "[[a|b]] fdkjf [[c|d]] fjdsj [[efg]]"
results = pattern.findall(text)
# outputs [('a', '|b'), ('c', '|d'), ('efg', '')]
print [link[0] for link in results]
# outputs ['a', 'c', 'efg']
Versione 3, se si desidera solo il collegamento senza il titolo.
pattern = re.compile(r"\[\[([\w ]+)(?:\|[\w ]+)?\]\]")
text = "[[a|b]] fdkjf [[c|d]] fjdsj [[efg]]"
results = pattern.findall(text)
# outputs ['a', 'c', 'efg']
Altri suggerimenti
RegExp: \ w + (\ w +) + (? =]])
ingresso
[[Alessandro di Parigi | poeta di nome Alessandro]]
uscita ??strong>
poeta di nome Alexander
ingresso
[[Alessandro di Parigi]]
uscita ??strong>
Alessandro di Parigi
import re
pattern = re.compile(r"\[\[([\w ]+)(?:\||\]\])")
text = "of which [[Alexander the Great]] was somewhat like [[King Arthur|Arthur]]"
results = pattern.findall(text)
print results
Darebbe l'output
["Alexander the Great", "King Arthur"]
Se stai cercando di ottenere tutti i collegamenti da una pagina, ovviamente è molto più semplice utilizzare l'API MediaWiki se possibile, ad es. http://en.wikipedia.org/ w / api.php action = interrogazione & amp;? prop = link & amp;. titoli = Stack_Overflow_ (sito web)
Si noti che entrambi questi metodi mancano i collegamenti incorporati nei modelli.