문제

다음 MediaWiki 마크 업과 같은 XML이있는 경우 :

"... [[알렉산더 대왕]]은 영웅이었고, 그가 대표되는 12 세기에 수집되었으며, 영국과 다소 대표되었다 [[Arthur | Arthur]]."

다음과 같은 것에 대한 적절한 주장은 무엇입니까?

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

나는 이중 사각형 괄호를 피하고 다음과 같은 텍스트에 대한 적절한 링크를 얻는 데 약간 걸려 넘어집니다. [[Alexander of Paris|poet named Alexander]]

도움이 되었습니까?

해결책

여기 예입니다

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는 더 많은 것을 Regex에 넣지 만 결과적으로 출력을 변경합니다.

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

다른 팁

regexp : w+( w+)+(? =]]))

입력

[파리의 알렉산더 | 시인 알렉산더]

산출

시인은 알렉산더

입력

[파리의 알렉산더]

산출

파리의 알렉산더

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

페이지에서 모든 링크를 얻으려고한다면 물론 가능한 경우 MediaWiki API를 사용하는 것이 훨씬 쉽습니다. http://en.wikipedia.org/w/api.php?action=query&prop=links&titles=stack_overflow_(website).

이 두 가지 방법은 템플릿에 포함 된 링크를 놓친다는 점에 유의하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top