这个问题可能是以不同的方式提出的,如果是这样,请指出给我。我在搜索结果中找不到它。
我想解析加价的文字,就像SO上的那些。
* some string
*some string*
用于斜体文字&some string&
表示网址&some string&specific url&
表示与字符串不同的网址等
我可以想到两种方法来处理字符串以找出特殊的标记序列:
a。我可以继续以字符为中心的方式,即解析字符串寻找序列1,然后是2等等。然而,这似乎是低效的,因为它必须解析字符串多个次。
b。最好逐个字符处理字符串并保留特殊字符及其位置的记忆。如果内存与上面的特殊序列匹配,则特殊字符将被字符串中的HTML替换。我不确定这是否是一个更好的主意,我也不确定应该如何实现它。
最好的方法是什么?正则表达式怎么样?它是否遵循模式 a 或 b ?还有第三种选择吗?
P.S。我正在使用Python。 Python示例最受赞赏。
答案 0 :(得分:1)
你实际上是在尝试实现词法分析器或'lexer'。您可以尝试搜索'lexer','parser','markup'以进一步阅读材料。 [编辑:我的意思是“解析器”,而不是“词法分析器”。词法分析器是解析器的一部分。]
解析器通常使用正则表达式作为解决方案的部分来实现,但它还有更多的内容。
如果你专门针对Markdown这样做,你确定你不想使用existing Markdown parser/lexer?已经存在一些非常快速且经过良好测试的Markdown解析器。
旁注:请尽量不要推广自己的标记语法 - 已经有数十种纯文本标记语言。选择一个你喜欢并使用它。想到维基百科的格式,Markdown和其他人。有现成的工具可以解析这些。
答案 1 :(得分:-1)
正则表达式,当然!如果还没有这样做,那就去学习吧。完成后,你会发现很难想象没有它你是如何相处的。您显示的示例很简单,使用正则表达式。例如,星号,然后是空格,然后是单词,表示为:
\*\s\w+
除了正则表达式之外别无其他。