【发布时间】:2014-03-17 22:55:33
【问题描述】:
Wiki-markup 将链接存储在 [[ 和 ]] 之间,也就是说,如果我编写 [[PageTitle]],Wikipedia 将生成一个指向名为 PageTitle 的内部页面的链接。但是,也可以使用 [[ ]] 生成其他链接,例如类别、文件、帮助、特殊等...
为了排除这些,我想出了以下正则表达式:
\[\[(?!Category|Wikipedia|File|Help|User talk|Special)(.*?)\]\]
这适用于大多数情况,除了引用(我一开始不想要)。引用存储在 ref XML 标记 (<ref></ref>) 中。例如:
<ref>"The remedy has been found: libertarian communism."
[http://www.theanarchistlibrary.org/HTML/Sebastien_Faure__Libertarian_Communism.html
[[Sébastien Faure]. "Libertarian Communism"]</ref>
理想情况下,我可以完全跳过引用,但至少,阅读字符串中没有 ] 的项目可能会解决这个问题。
我知道你们中的大多数人会告诉我不要使用正则表达式来解析 wiki 标记,但是我将解析 wikipedia 中的所有链接(通过他们的 XML 转储),这意味着我能编写的代码越简单越好.
【问题讨论】:
-
您使用什么语言/工具?
-
C#...虽然如果需要的话我会考虑替代方案...
-
首先,Wiki Syntax isn't regular,但如果你想treat it as a regular language you can, you just need to be able to express the exact things you need to extract,就知道了。如果您可以将其添加进去,那将更有可能获得准确的答案。
标签: regex