获取regex子组的值

2024-04-18 00:33:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个正则表达式来从类似wiki的页面中提取链接:

for mo in re finditer(r"\[\[([^|\]]+)(|([^\]]+))?\]\]", page):

(wiki链接看起来像[[link target]][[link target|text]]

匹配没问题,但是,我无法找到从第二部分的子组中获得text的方法:[[(…)(|(I need the contents of this group))?]]

这样一个链接的mo.groups()的返回值如下(第一行是匹配的输入):

^{pr2}$

我希望第三个元素是Admins,而不是|Admins。在

我知道我可以简单地切掉管道字符(实际上这就是我现在正在做的),但是有没有一种re的方法来完成这个操作呢?在

(我使用的是python3.4.1)


Tags: 方法textinretargetfor链接wiki
2条回答

将|放入非捕获组:

r"\[\[([^|\]]+)(?:\|([^\]]+))?\]\]"

正如阿维纳什指出的,逃离|,结果将是:

^{pr2}$

您只需要转义中间的|符号,这样它就可以匹配文本|符号,否则它将执行regex或操作。|在character类中,它将失去它的特殊含义,只匹配文本|符号。但是character类之外的未转义的|符号的作用类似于alternation operator。在

\[\[([^|\]]+)(\|([^\]]+))?\]\]
              ^
              |

DEMO

^{pr2}$

相关问题 更多 >

    热门问题