Python正则表达式与Wiki文本

3 投票
4 回答
3766 浏览
提问于 2025-04-16 11:25

我想用Python的正则表达式把维基文本转换成普通文本。关于维基链接,有两个格式规则。

  • [[页面名称]]
  • [[页面名称 | 显示的文本]]

    (http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet)

下面这段文字让我很头疼。

这张CD几乎完全由[[翻唱版本]]的[[披头士]]歌曲组成,这些歌曲最初是由乔治·马丁[[制作人|制作]]的。

上面的文本应该改成:

这张CD几乎完全由翻唱版本的披头士歌曲组成,这些歌曲最初是由乔治·马丁制作的。

我主要的问题是[[ ]]和[[ | ]]这两种语法之间的冲突。我不需要一个复杂的正则表达式。顺序使用多个(可能是两个)正则表达式替换是可以的。

请帮我解决这个问题。

4 个回答

0

这个应该可以用:

text = "The CD is composed almost entirely of [[cover version]]s of [[The Beatles]] songs which George Martin [[record producer|produced]] originally."
newText = re.sub(r'\[\[([^\|\]]+\|)?([^\]]+)\]\]',r'\2',text)
2

你走错路了。Wiki标记语言非常难以解析,里面有很多例外情况和一些根本就不对的标记,所以自己写正则表达式来处理几乎是不可能的。既然你在用Python,我建议你使用mwlib,它可以帮你完成这些复杂的工作:

http://code.pediapress.com/wiki/wiki/mwlib

7
wikilink_rx = re.compile(r'\[\[(?:[^|\]]*\|)?([^\]]+)\]\]')
return wikilink_rx.sub(r'\1', the_string)

示例:http://ideone.com/7oxuz

注意:你还可以在http://www.mediawiki.org/wiki/Alternative_parsers找到一些MediaWiki解析器。

撰写回答