条件Python正则表达式和命名组

时间:2015-07-07 10:47:38

标签: python regex

我有一个字符串:

/foo/bar

以及以下正则表达式:

/(?P<g1>.*)/(?P<g2>.*)$

字符串与模式匹配,并捕获两个组:

g1 = foo

g2 = bar

如何强制选择匹配?

我需要那个&#34; / bar&#34;被捕获到g1 =&#34; bar&#34; (但不是/ bar /)如果没有第二组可以匹配吗?

(使用regex101进行测试)

由于

1 个答案:

答案 0 :(得分:2)

你需要一个字符串锚^的开头来限制字符串只有2个slahses。而且正如Avinash Raj所说,你需要让正则表达式的某些部分可选。

^/(?P<g1>[^/\n]*)/?(?P<g2>[^/\n]*)?(?<!/)$

请参阅demo

\n仅在多线模式下是必需的,因此[^/]无法与换行符匹配。

REGEX EXPLANATION

  • ^/ - 字符串和文字/
  • 的开头
  • (?P<g1>[^/\n]*) - 第一个必须匹配的捕获组(必须匹配一次),但匹配任何字符,/(或\n,如果你保留它),0次或更多次
  • /? - 0或1 /字符
  • (?P<g2>[^/\n]*)? - 可选的第二个捕获组,匹配/\n以外的0个或多个字符
  • (?<!/)$ - 以/以外的字符开头的字符串结尾。