我正在编写一个Python脚本来解析Wikipedia文章,这个过程的一部分就是解析链接。我试着写一个正则表达式,以这种方式匹配:
[[:Category:Anarchism by country|Anarchism by country]]
->:Category:Anarchism by country
[[Squatting|squat]]
->Squatting
[[File:Jarach and Zerzan.JPG|thumb|Lawrence Jarach (left) and [[John Zerzan]] (right)
->John Zerzan
* {{cite book |last=Avrich |first=Paul |author-link=Paul Avrich |title=[[Anarchist Voices: An Oral History of Anarchism in America]] |year=1996 |publisher=[[Princeton University Press]] |isbn=978-0-691-04494-1
-> Unmatched,begins with* {{
(引用)
我已经达到了\[\[([^|\]]+)(?:\|[^|\]]+)?\]\]
,它在上面的3个例子中起作用,但在引用中它与标题和出版商相匹配。我知道(我认为)我需要一个负的前瞻来防止最后一个例子中的任何匹配。我对正则表达式很不好,所以任何建议都将非常感谢。
1条答案
按热度按时间ru9i0ody1#
Wikitext相当复杂,不应该单独使用正则表达式进行解析。相反,使用一个成熟的解析器,比如
mwparserfromhell
:对于以下wikitext(部分由ChatGPT生成):
.它输出:
不幸的是,
mwparserfromhell
doesn't recognize namespaces,所以如果你要使用它,你必须自己检查File
链接。我在上面的函数中使用了一个粗略的.startswith('File')
,但是你可能想做一个更好的检查,因为命名空间名称是不区分大小写的:file
和fIlE
都是有效的,与File
的含义相同。