Python正则表达式与Wiki文本
我想用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,它可以帮你完成这些复杂的工作:
7
wikilink_rx = re.compile(r'\[\[(?:[^|\]]*\|)?([^\]]+)\]\]')
return wikilink_rx.sub(r'\1', the_string)
注意:你还可以在http://www.mediawiki.org/wiki/Alternative_parsers找到一些MediaWiki解析器。