2009-05-01 51 views
3

如果我有一個包含類似下面的mediawiki標記的東西一些XML:Python的正則表達式查找鏈接到MediaWiki標記的內容鏈接

「......在12世紀收集,其中[亞歷山大大帝]是 英雄,他在其中表示, 有點像英國的[[國王亞瑟 |亞瑟]」

什麼是適當的參數是這樣的:

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

我在逃避雙括號,並得到適當的鏈接,如文本絆了一下:[[Alexander of Paris|poet named Alexander]]

回答

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

我使用'\ [\ [(。+?)\] \]'爲我自己的目的。它有點短。 :) – Gandaro 2012-02-04 14:26:11

1

正則表達式: \ w +(\ w +)+(=]?)

輸入

[巴黎的亞歷山大|詩人名叫亞歷山大]

輸出

詩人命名亞歷山大

輸入

[亞歷山大的巴黎]輸出

亞歷山大巴黎

+0

這不是所需的輸出。 ;) – Gandaro 2012-02-04 14:28:33

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