跟踪字符串中标记的最有效方法是什么?

时间:2012-04-22 17:35:33

标签: python html regex markdown markup

这个问题可能是以不同的方式提出的,如果是这样,请指出给我。我在搜索结果中找不到它。

我想解析加价的文字,就像SO上的那些。

  1. 例如。子弹列表* some string
  2. 例如。 *some string*用于斜体文字
  3. 例如。 &some string&表示网址
  4. 例如。 &some string&specific url&表示与字符串不同的网址
  5. 我可以想到两种方法来处理字符串以找出特殊的标记序列:

    a。我可以继续以字符为中心的方式,即解析字符串寻找序列1,然后是2等等。然而,这似乎是低效的,因为它必须解析字符串多个次。

    b。最好逐个字符处理字符串并保留特殊字符及其位置的记忆。如果内存与上面的特殊序列匹配,则特殊字符将被字符串中的HTML替换。我不确定这是否是一个更好的主意,我也不确定应该如何实现它。

    最好的方法是什么?正则表达式怎么样?它是否遵循模式 a b ?还有第三种选择吗?

    P.S。我正在使用Python。 Python示例最受赞赏。

2 个答案:

答案 0 :(得分:1)

你实际上是在尝试实现词法分析器或'lexer'。您可以尝试搜索'lexer','parser','markup'以进一步阅读材料。 [编辑:我的意思是“解析器”,而不是“词法分析器”。词法分析器是解析器的一部分。]

解析器通常使用正则表达式作为解决方案的部分来实现,但它还有更多的内容。

如果你专门针对Markdown这样做,你确定你不想使用existing Markdown parser/lexer?已经存在一些非常快速且经过良好测试的Markdown解析器。


旁注:请尽量不要推广自己的标记语法 - 已经有数十种纯文本标记语言。选择一个你喜欢并使用它。想到维基百科的格式,Markdown和其他人。有现成的工具可以解析这些。

答案 1 :(得分:-1)

正则表达式,当然!如果还没有这样做,那就去学习吧。完成后,你会发现很难想象没有它你是如何相处的。您显示的示例很简单,使用正则表达式。例如,星号,然后是空格,然后是单词,表示为:

\*\s\w+

除了正则表达式之外别无其他。