?=和?P组合在一个正则表达式中

时间:2016-03-22 20:22:35

标签: python regex

简而言之: 我想在Python中使用Lookahead技术和?P<name>约定(详细信息here)来按名称获取组。

更多详情:

我发现了Lookahead技巧here;例如以下正则表达式......

/^(?=.*Tim)(?=.*stupid).+

...允许检测"Tim stupid""stupid Tim"等字符串,但顺序并不重要。

我无法弄清楚如何合并?=&#34;运营商&#34;与?P一个;下面的正则表达式显然没有做到这一点,但会给出我想要的想法:

/^(?=?P<word1>.*Tim)(?=?P<word2>.*stupid).+

1 个答案:

答案 0 :(得分:1)

正则表达式中的?P<word1>提醒named capture group

  

命名组的语法是特定于Python的扩展之一:(?P<name>...)*name*显然是该组的名称。命名组的行为与捕获组完全相同,并且还将名称与组关联。

所以,很可能你正在寻找一种方法来捕获子串,这些子串在开头的一个正向前瞻中需要一个字符串来满足这两个模式,并捕获两个前瞻中的子串: / p>

^(?=(?P<word1>.*Tim))(?=(?P<word2>.*stupid)).+
    ^^^^^^^^^^     ^    ^^^^^^^^^^        ^ 

请参阅regex demo

请注意,如果您不需要字符串本身,.+是多余的,可以删除。如有必要,您可能需要重新调整命名捕获组的边界。