1

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

我想解析文本以进行标记,就像 SO 上的那些。

  1. 例如。* some string对于项目符号列表
  2. 例如。*some string*斜体文字
  3. 例如。&some string&一个网址
  4. 例如。&some string&specific url&对于不同于字符串的 URL

等等

我可以想到两种方法来处理字符串以找出特殊的标记序列:

一个。我可以以字符为中心的方式进行,即解析字符串以查找序列 1,然后是 2 等。但这似乎效率低下,因为它必须多次解析字符串。

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

解决此问题的最佳方法是什么?正则表达式怎么样?它遵循模式a还是b?有第三种选择吗?

PS我正在使用Python。Python 示例最受赞赏。

4

2 回答 2

1

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

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

如果您专门为 Markdown 执行此操作,您确定不想使用现有的 Markdown 解析器/词法分析器吗?已经存在一些非常快速且经过良好测试的 Markdown 解析器。


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

于 2012-04-22T19:57:17.890 回答
-1

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

\*\s\w+

除了正则表达式没有别的。

于 2012-04-22T17:43:31.693 回答