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]]

È stato utile?

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

poeta di nome Alexander

ingresso

[[Alessandro di Parigi]]

uscita

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top