3

次のmediawikiマークアップのようなものを含むxmlがある場合:

「...12世紀に収集されたもので、[[アレキサンダー大王]]が主人公であり、イギリス人[[アーサー王|アーサー]]のように彼が代表されていました。」

次のようなものに対する適切な議論は何でしょうか:

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

二重角かっこをエスケープして、次のようなテキストの適切なリンクを取得することに少しつまずきました。[[Alexander of Paris|poet named Alexander]]

4

4 に答える 4

5

これが例です

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']
于 2009-05-01T01:20:08.580 に答える
1

正規表現: \ w +(\ w +)+(?=]])

入力

[[パリのアレクサンドル|アレクサンドルという詩人]]

出力

アレクサンダーという名前の詩人

入力

[[パリのアレクサンドル]]

出力

パリのアレクサンドル

于 2009-05-01T01:52:23.103 に答える
1
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"]
于 2009-05-01T01:57:28.473 に答える
1

ページからすべてのリンクを取得しようとしている場合は、もちろん、可能であればMediaWiki APIを使用する方がはるかに簡単です(例: http: //en.wikipedia.org/w/api.php ?action = query&prop =)。 links&titles = Stack_Overflow_(website)

これらの方法は両方とも、テンプレートに埋め込まれたリンクを見逃していることに注意してください。

于 2009-05-01T04:23:25.750 に答える