正则表达式匹配可选组

2024-05-15 06:05:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道RegEx不是最好的方法来抓取HTMLs,但这就是它。。。 我有一些类似的东西:

<td> Writing: <a href="creator.php?c=CCh">Carlo Chendi</a>  Art: <a href="creator.php?c=LBo">Luciano Bottaro</a> </td>

我需要匹配写作和艺术部分。但并没有说它们在那里,可能还有墨水和铅笔之类的其他部件。。。在

我该怎么做?我需要使用纯正则表达式,不需要额外的Python库。在


Tags: 方法regextdcarlophphrefcreatorart
3条回答

也许有两种模式需要识别。在

  1. 您的关键字存在于<;td>;…<;/td>
  2. 关键字后面是<;a>;…<;/a>;部分

所以。。首先提取<;td>;s中的所有内容。。。(psuedo代码)

while ( match( "<td[^>]*>(.*?)</td[^>]*>" ) ) {
    inner = match[1];
    ...
}

(.*?)表示不贪婪地匹配,即尽可能地匹配最小值。否则,您将匹配从第一个<td>到最后一个{</td>(而不是下一个</td>)。在

然后您可以继续处理inner部分!在

我最终创造了这个:

(Art:|Pencils:|Ink:|Writing:){0,4}.<a href="creator\.php\?c=[^">]*?\"\>(?P<Name>.*?)\</a\>

看来它是有效的。。。也许可以稍微擦一下。你知道,我是个新手。在

regex = re.compile("(\w+):")
regex.findall(yourString); // returns an array of matching elements

你可以测试它here

附言:我强烈建议你通过this

相关问题 更多 >

    热门问题