我正在尝试使用python正则表达式在Dokuwiki中找到一个URL。 Dokuwikis格式的URL如下:
[['insert URL'|Name of External Link]]
我需要设计一个python正则表达式来捕获URL但停在'|'
除了'|'
之外,我可以尝试输入每个非字母数字字符
(像这样:(https?://[\w|\.|\-|\?|\/|\=|\+|\!|\@|\#|\$|\%|^|&]*) )
然而,听起来真的很乏味,我可能会错过一个。
思想?
答案 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
中正则表达式的更多信息