使用python提取复杂的链接

时间:2019-03-07 10:20:08

标签: python regex

我有一个RegEx,应该在方括号之间找到所有字母数字字符或文本,如上面链接中的示例所示。这些文本实际上是带有说明的链接(例如[[Toto|there's a link here]]是指向页面Toto的链接)

但是问题是我可能在方括号之间有其他文本,因此就像您在链接中看到的那样,它不能识别结尾的括号(]])。

在那些链接中还有另一个重要的模式,其中有管道(|)将我的文本分为两部分或三部分。在其中有两个部分的情况下,我只想在左侧显示文本,而在我有三个部分的情况下,我要在右侧显示文本。

示例:

[[File:Euclid flowchart 1.png|vignette|[[Flowchart]] of an algorithm ([[Euclid's algorithm]]).]]

我只想要[[Flowchart]] of an algorithm ([[Euclid's algorithm]]).部分(这是一个png,下面有说明,在此说明中还有其他链接)

[[Babylone|Babyloniens]]

我想要Babylone

在第一个示例中,还有其他链接,但是我可以使用第一个正则表达式或递归轻松提取它们。

您可以看到我的代码here

的示例

1 个答案:

答案 0 :(得分:1)

您可以尝试此模式\[\[(.+?)\|(.+?)(\|(.+))?\]\]

模式捕获以将管道|之间的字符串分组。我使用了非贪心运算符.+?,否则它将捕获所有内容,直到最后一个管道为止。非贪婪的操作员会捕获直到第一次出现管道。但是最后一个运算符是贪婪的-这是因为我们要捕获直到最后]]的所有内容,因此与我们先前想要的相反。

(\|(.+))?也表示第三部分(不包括附加的管道字符)是可选的(最多可以出现一次)。

这还需要额外的逻辑-您需要首先检查是否存在第四个捕获组,如果存在,则意味着该字符串已通过管道分成三部分。如果它不存在,那么它将仅分为两部分,在这种情况下,您想获得第一个捕获组。

Demo