3 Stimmen

Python regex für das Finden von Inhalten von MediaWiki-Auszeichnungslinks

Wenn ich etwas XML habe, das Dinge wie die folgende MediaWiki-Auszeichnung enthält:

"...gesammelt im 12. Jahrhundert, von dem [[Alexander der Große]] der Held war, und in dem er dargestellt wurde, etwas wie der britische [[König Arthur|Arthur]]"

welche wären die passenden Argumente für so etwas wie:

re.findall([[__?__]], article_entry)

Ich habe ein wenig Schwierigkeiten, die doppelten eckigen Klammern zu escapen und den richtigen Link für Text wie: [[Alexander von Paris|Dichter namens Alexander]]

5voto

Unknown Punkte 44574

Hier ist ein Beispiel

import re

pattern = re.compile(r"\[\[([\w \|]+)\]\]")
text = "blah blah [[Alexander von Paris|Dichter namens Alexander]] bldfkas"
results = pattern.findall(text)

output = []
for link in results:
    output.append(link.split("|")[0])

# outputs ['Alexander von Paris']

Version 2, fügt mehr zum Regex hinzu, ändert aber als Ergebnis die Ausgabe:

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

Version 3, wenn Sie nur den Link ohne den Titel möchten.

pattern = re.compile(r"\[\[([\w ]+)(?:\|[\w ]+)?\]\]")
text = "[[a|b]] fdkjf [[c|d]] fjdsj [[efg]]"
results = pattern.findall(text)

# outputs ['a', 'c', 'efg']

1voto

ByteNirvana Punkte 5512

RegExp: \w+( \w+)+(?=]])

Eingabe

[[Alexander von Paris|Dichter namens Alexander]]

Ausgabe

Dichter namens Alexander

Eingabe

[[Alexander von Paris]]

Ausgabe

Alexander von Paris

1voto

erik Punkte 1218
import re
pattern = re.compile(r"\[\[([\w ]+)(?:\||\]\])")
text = "von denen [[Alexander der Große]] etwas ähnlich war wie [[König Arthur|Arthur]]"
results = pattern.findall(text)
print results

Würde die Ausgabe geben

["Alexander der Große", "König Arthur"]

1voto

pfctdayelise Punkte 4859

Wenn Sie versuchen, alle Links von einer Seite zu erhalten, ist es natürlich viel einfacher, die MediaWiki API zu verwenden, wenn möglich, z.B. http://en.wikipedia.org/w/api.php?action=query&prop=links&titles=Stack_Overflow_(website).

Beachten Sie, dass beide Methoden Links verpassen, die in Vorlagen eingebettet sind.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X