python正则表达式多个可选捕获组

时间:2015-08-13 09:06:03

标签: python regex capture-group

我尝试使用忽略案例捕获多个组,并暂时不做任何进展。 我正在检查的字符串可以有多种形式,例如

<A title="Test title Ch.42" href="http://www.google.com">Test title Ch.42  </a>
<A title="Test title Vol2. Ch.42" href="http://www.google.com">Test title Vol2. Ch.42  </a>
<A title="Test title Vol2.Ch.42" href="http://www.google.com">Test title Vol2.Ch.42  </a>
<A title="Test title \"with multiple quotes\" Ch.42" href="http://www.google.com">Test title "with multiple quotes" Ch.42  </a>
<A title="Test title w1th numb3rs Ch.42" href="http://www.google.com">Test title w1th numb3rs Ch.42  </a>
<A title="Test title no 42" href="http://www.google.com">Test title no 42  </a>

所以一般来说规则是这样的:

  • 标题标签中的主标题可以包含每个字符,包括数字和特殊字符

  • 网址是标准网址,但可以使用(。*)表达式进行捕获而不会出现问题

  • The Ch。通常是可选的

  • 如果该字符串包含Vol。,则Ch。获得强制性

我当前的正则表达式如下所示:

pattern = re.compile('<A title="((.*)(?:Vol.[\d]+){0,1}(?: Ch.){0,1}([\d]+))" href="(.*)">')

我想尝试捕获:

  • 包含Vol和Ch的标题标签,包括背后的数字

  • 没有Vol和Ch的标题(没有Vol和Ch背后的数字)

  • Ch。

  • 背后的数字

分割正则表达式会更好吗,对性能有什么好处(它运行几千个字符串,所以我想保持它的性能)?

亲切的问候Baumchen

1 个答案:

答案 0 :(得分:0)

在这种情况下,正则表达式不是解析的最佳工具,我想有一个完全适合的工具。但是,举个例子,你可以试试这个:

@{
    Layout = null;
}


<div id="itemView">
    @{
        foreach (var uri in @Model)
        {
            <img class="item" src="@uri" />

        }
    }
</div>

DEMO

  • <a title="(.+?)\s?((Vol(\d+))?\s?\.?(Ch.(\d+)))?"\shref="(.+)"> - title,
  • group(1) - 使用num或/使用带有num的
  • 的卷
  • group(2) - Vol with number
  • group(3) - 仅限(Vol)
  • group(4) - Ch,数字
  • group(5) - 仅限编号(Ch。)
  • group(6) - 网址