Python регулярное выражение для поиска содержимого ссылок разметки MediaWiki - PullRequest
3 голосов
/ 01 мая 2009

Если у меня есть xml, содержащий такие вещи, как следующая разметка MediaWiki:

"... собранный в 12 веке, из которых [[Александр Великий]] был герой, и в котором он был представлен, чем-то похожим на англичан [[король Артур | Артур]] "

каковы были бы подходящие аргументы для чего-то вроде:

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

Я немного спотыкаюсь при выходе из двойных квадратных скобок и получаю правильную ссылку для текста вроде: [[Alexander of Paris|poet named Alexander]]

Ответы [ 4 ]

5 голосов
/ 01 мая 2009

Вот пример

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

Версия 2, добавляет больше в регулярное выражение, но в результате изменяет вывод:

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

Версия 3, если вам нужна только ссылка без заголовка.

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

# outputs ['a', 'c', 'efg']
1 голос
/ 01 мая 2009

Если вы пытаетесь получить все ссылки со страницы, конечно, гораздо проще использовать MediaWiki API, если это вообще возможно, например, http://en.wikipedia.org/w/api.php?action=query&prop=links&titles=Stack_Overflow_(website).

Обратите внимание, что оба эти метода пропускают ссылки, встроенные в шаблоны.

1 голос
/ 01 мая 2009
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

выдаст вывод

["Alexander the Great", "King Arthur"]
1 голос
/ 01 мая 2009

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

вход

[[Александр Парижский | поэт по имени Александр]]

выход

поэт по имени Александр

ввод

[[Александр из Парижа]]

выход

Александр Парижский

...