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>
所以一般来说规则是这样的:
title标签中的主标题可以包含所有字符,包括数字和特殊字符
url 是标准的 url,但可以用 (.*) 表达式捕获而不会出现问题
通道。一般是可选的
如果字符串包含 Vol.,Ch.强制执行
我当前的正则表达式如下所示:
pattern = re.compile('<A title="((.*)(?:Vol.[\d]+){0,1}(?: Ch.){0,1}([\d]+))" href="(.*)">')
我想尝试捕获:
带有 Vol 和 Ch 的标题标签,包括后面的数字
没有Vol和Ch的标题(也没有Vol和Ch后面的数字)
Ch.后面的数字
拆分正则表达式会更好吗,什么对性能更好(运行 超过几千个字符串,所以我想保持它的性能)?
问候 Baumchen
在这种情况下,Regex 不是解析的最佳工具,我想确实有适合的工具。但是对于给定的例子,你可以试试这个:
<a title="(.+?)\s?((Vol(\d+))?\s?\.?(Ch.(\d+)))?"\shref="(.+)">
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
我尝试捕获多个忽略案例的组,但暂时没有任何进展。 我正在检查的字符串可以有多种形式,例如
<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>
所以一般来说规则是这样的:
title标签中的主标题可以包含所有字符,包括数字和特殊字符
url 是标准的 url,但可以用 (.*) 表达式捕获而不会出现问题
通道。一般是可选的
如果字符串包含 Vol.,Ch.强制执行
我当前的正则表达式如下所示:
pattern = re.compile('<A title="((.*)(?:Vol.[\d]+){0,1}(?: Ch.){0,1}([\d]+))" href="(.*)">')
我想尝试捕获:
带有 Vol 和 Ch 的标题标签,包括后面的数字
没有Vol和Ch的标题(也没有Vol和Ch后面的数字)
Ch.后面的数字
拆分正则表达式会更好吗,什么对性能更好(运行 超过几千个字符串,所以我想保持它的性能)?
问候 Baumchen
在这种情况下,Regex 不是解析的最佳工具,我想确实有适合的工具。但是对于给定的例子,你可以试试这个:
<a title="(.+?)\s?((Vol(\d+))?\s?\.?(Ch.(\d+)))?"\shref="(.+)">
group(1)
- 标题,group(2)
- Vol with num or/with Ch with num,group(3)
- 数量group(4)
- 只有数量(卷)group(5)
- Ch with numbergroup(6)
- 只有数量(Ch.)group(7)
- URL