2012-04-22 65 views
1

這個問題可能是以不同的方式提出來的,如果有的話請向我指出。我無法在搜索結果中找到它。跟蹤字符串中標記的最有效方法是什麼?

我想解析標記的文本,就像這裏的標記一樣。

  1. 例如, * some string for bullet list
  2. eg。 *some string*斜體文本
  3. 例如。 &some string&對於一個URL
  4. 例如。 &some string&specific url&的URL字符串從

我能想到的兩種方法去處理一個字符串,找出特殊的加價順序不同:

一個。我可以繼續以字符爲中心的方式,即解析字符串尋找序列1,然後2等。然而,這似乎是低效的,因爲它將不得不多次解析字符串。

b。對字符串進行逐字處理似乎更好,並保留特殊字符及其位置的記憶。如果內存匹配上面的特殊序列,則字符串中的特殊字符被替換爲HTML。我不確定這是否是一個更好的主意,我也不確定如何實施它。

什麼是最好的方式去做這件事?正則表達式如何?它遵循模式ab?有第三種選擇嗎?

P.S.我正在使用Python。 Python示例最受讚賞。

+0

我認爲正則表達式可能是最簡單的方法。不是最高效的,但除非你正在處理幾百KB文件,否則你可能不應該有任何問題。 – Ryan 2012-04-22 17:40:08

+0

您確定要這麼做嗎? – PeeHaa 2012-04-22 17:40:12

+0

@minitech:我想用自己的標記存儲文檔,並希望能夠加載HTML翻譯而不會出現延遲。但頁面不應該變大(但其大小取決於最終用戶)。 – Benjamin 2012-04-22 17:46:15

回答

1

你基本上試圖實現一個詞法分析器或'詞法分析器'。您可以嘗試搜索「詞法分析器」,「分析器」,「標記」以獲取更多的閱讀材料。 [編輯:我可能是指「解析器」,而不是「詞法分析器」。詞法分析器是一個解析器的一部分。]

解析器通常實現使用正則表達式作爲部分解決方案的,但還有比這更給它一點。

如果你這樣做是爲降價具體而言,你肯定不希望使用existing Markdown parser/lexer?有一些非常快,經過嚴格測試的降價解析器已經存在。


旁註:請儘量不要滾動自己的標記語法 - 已經有幾十種純文本標記語言。選一個你喜歡的,並使用它。維基百科格式化,Markdown和其他人都會想起來。有現成的解析這些工具的工具。

+0

+1,我會檢查這個鏈接http://en.wikipedia.org/wiki/Lightweight_markup_language並選擇最接近的匹配。 – Juha 2012-04-23 08:47:02

-1

正則表達式,當然!如果還沒有這樣做,學習它。完成之後,你會發現很難想象如果沒有它,你會如何相處。您顯示的樣本使用正則表達式很簡單。例如,一個星號,然後是一個空格,然後一個單詞表達爲:

\*\s\w+

不外乎正則表達式。

+0

我已經使用RE,但從來沒有在搜索和替換,並從來沒有與多個可能的序列使用相同的字符。我會嘗試你的建議。謝謝。 – Benjamin 2012-04-22 17:48:18

相關問題