2012-05-28 34 views
1

我需要使用mediawiki語法(表格)解析文件。使用以下模式解析文件

我知道sed或awk可以做到這一點,但我不是這些的專家。

我需要找到以下樣式:

beginning_of_line| [[text]] || random_stuff_until_newline 

可能存在管道和brakets之間是(或沒有)的空間。我需要一個輸出文本

對我來說任何解決方案?

Thx

回答

2

這樣的分析文本像解析XML或HTML正則表達式並不適用於這種類型的文檔,您應該嘗試找到一個suited for the job的Python或Perl模塊

但是,這裏有一個sed命令,它可以在您作爲示例提供的簡單情況下工作。

sed 's/^[^|]*|[[:space:]]*\[\[\([^]]\+\)\]\].*/\1/' inputfile 
1

我會尋找一個Mediawiki解析器。它必須存在某個地方。

失敗的是,如果你有一個mediawiki的語法,你可以使用ANTLR或類似的語法生成一個解析器,具體取決於它是什麼類型的語法。

如果你沒有語法或者因爲學習曲線不想這樣做,那麼你需要一些可靠的方法來區分你所說的「文本和你所說的隨機東西。是管道保證在那裏?如果是在Java中,你可以只使用管道作爲參數分裂做String.split()。

這是什麼意思?

+0

不幸的是,鏈接到MediaWiki語法的唯一正確的解析器是鏈接到MediaWiki本身。沒有正式的語法或類似的東西。 – svick

+0

好的,你確定嗎?所以你說的是他們使用正則表達式庫手動編碼解析器。這可能是真的。通過比較,這不是真的HTML或CSS。呃,如果是這種情況,那麼你必須自己使用正則表達式。 Java有一個強大的正則表達式庫,就像Perl和AWK –

+0

我沒有看源代碼,所以我不確定MediaWiki是否使用正則表達式(雖然我懷疑它,語言是不規則的)。似乎有許多[替代解析器](http://www.mediawiki.org/wiki/Alternative_parsers)和[一些嘗試寫出適當的規格](http://www.mediawiki.org/wiki/Markup_spec),但沒有一個是完整的。 – svick

0

這可能爲你工作(GNU SED):

sed 's/^[^|]*|\s*\[\[\([^]]*\(][^]]*\)*\)]]\s*||.*/\1/;t;d' file