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

python regex multiple optional capture groups

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

<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>

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

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

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

我想尝试捕获:

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

问候 Baumchen

在这种情况下,Regex 不是解析的最佳工具,我想确实有适合的工具。但是对于给定的例子,你可以试试这个:

<a title="(.+?)\s?((Vol(\d+))?\s?\.?(Ch.(\d+)))?"\shref="(.+)">

DEMO

  • group(1) - 标题,
  • group(2) - Vol with num or/with Ch with num,
  • group(3) - 数量
  • group(4) - 只有数量(卷)
  • group(5) - Ch with number
  • group(6) - 只有数量(Ch.)
  • group(7) - URL