Python Regex停在'|'字符

时间:2014-06-12 23:32:21

标签: python regex

我正在尝试使用python正则表达式在Dokuwiki中找到一个URL。 Dokuwikis格式的URL如下:

[['insert URL'|Name of External Link]]

我需要设计一个python正则表达式来捕获URL但停在'|'

除了'|'之外,我可以尝试输入每个非字母数字字符 (像这样:(https?://[\w|\.|\-|\?|\/|\=|\+|\!|\@|\#|\$|\%|^|&]*) )

然而,听起来真的很乏味,我可能会错过一个。

思想?

2 个答案:

答案 0 :(得分:0)

您可以使用否定字符集或[^things to not match]

在这种情况下,您希望不匹配|,因此您将拥有[^|]

import re

bool(re.match("[^|]", "a"))
#>>> True

bool(re.match("[^|]", "|"))
#>>> False

答案 1 :(得分:0)

你期待任何不是|的角色然后是|和其他一些不是]的字符,所有内容都包含在双方括号内。这转化为:

pattern = re.compile('\[\[([^\|]+)\|([^/]]+)\]\]')
print pattern.match("[[http://bla.org/path/to/page|Name of External Link]]").groups()

这将打印:

('http://bla.org/path/to/page', 'Name of External Link')

如果您不需要链接名称,只需删除第二组周围的括号即可。有关Python here

中正则表达式的更多信息