我知道RegEx不是刮取HTML的最好方法,但这就是它...... 我有类似的东西:
<td> Writing: <a href="creator.php?c=CCh">Carlo Chendi</a> Art: <a href="creator.php?c=LBo">Luciano Bottaro</a> </td>
我需要匹配写作和艺术部分。但并不是说他们在那里,而且可能还有墨水和铅笔等其他部分......
我该怎么做?我需要使用纯RegEx,没有额外的Python库。
答案 0 :(得分:2)
也许有两种模式可以识别。
所以..首先提取&lt; td&gt; s中的所有内容......(伪代码)
while ( match( "<td[^>]*>(.*?)</td[^>]*>" ) ) {
inner = match[1];
...
}
(.*?)
表示非贪婪匹配,即匹配最小可能值。否则,您会匹配从第一个<td>
到最后一个 </td>
(而不是下一个</td>
)的所有内容。
然后您可以继续处理inner
部分!
答案 1 :(得分:1)
regex = re.compile("(\w+):")
regex.findall(yourString); // returns an array of matching elements
您可以对其进行测试here
PS:我强烈建议您通过this
答案 2 :(得分:1)
我最终创造了这个:
(Art:|Pencils:|Ink:|Writing:){0,4}.<a href="creator\.php\?c=[^">]*?\"\>(?P<Name>.*?)\</a\>
看起来它正在工作......也许它可以打磨一下。我知道你是首发。
答案 3 :(得分:0)
您可以使用?匹配正则表达式中的可选内容?在可选部分之后。 ?将匹配0或1次出现的子表达式。
答案 4 :(得分:0)
尽管我之前的回答,我改变了主意,并希望没有选择/替代,但得到所有。因此,这意味着TD标签内的任何内容都必须被捕获并正确分类。 我需要创建一个可选的捕获组,这样无论布局如何,我仍然可以检索内容。 它应该适用于此,即:
<td> Art: <a href="creator.php?c=GPe">Giuseppe Perego</a> </td>
<td> Writing: <a href="creator.php?c=CCh">Carlo Chendi</a> Art: <a href="creator.php?c=LBo">Luciano Bottaro</a> </td>
<td> Pencils: <a href="creator.php?c=JB">Jack Bradbury</a> Ink: <a href="creator.php?c=SSt">Steve Steere</a> </td>
<td> Pencils: <a href="creator.php?c=JB">Jack Bradbury</a> Ink: <a href="creator.php?c=SSt">Steve Steere</a> </td>
<td> Writing: <a href="creator.php?c=DKi">Dick Kinney</a> Pencils: <a href="creator.php?c=TS">Tony Strobl</a> Ink: <a href="creator.php?c=SSt">Steve Steere</a> </td>
<td> Pencils: <a href="creator.php?c=JB">Jack Bradbury</a> Ink: <a href="creator.php?c=SSt">Steve Steere</a> </td>
<td> Writing: <a href="creator.php?c=BKa">Bob Karp</a> Pencils: <a href="creator.php?c=AT">Al Taliaferro</a> Ink: <a href="creator.php?c=AH">Al Hubbard</a> </td>
<td> Writing: <a href="creator.php?c=DKi">Dick Kinney</a> Pencils: <a href="creator.php?c=TS">Tony Strobl</a> Ink: <a href="creator.php?c=SSt">Steve Steere</a> </td>
<td> Writing: <a href="creator.php?c=VLo">Vic Lockman</a> Art: <a href="creator.php?c=KWr">Kay Wright</a> </td>
<td> Writing: <a href="creator.php?c=MGa">Michele Gazzarri</a> Art: <a href="creator.php?c=GPe">Giuseppe Perego</a> </td>
我创建了:
<td>\ {1,3}(?:(?:Writing: <a href="creator\.php\?c=[^>"]*?">(.*?)?</a>).*?)?(?:(?:Pencils: <a href="creator\.php\?c=[^>"]*?">(.*?)?</a>\ ))?(?:(?:Ink: <a href="creator\.php\?c=[^>"]*?">(.*?)?</a>))?(?:(?:Art: <a href="creator\.php\?c=[^>"]*?">(.*?)?</a>))?\ {1,3}</td>
它看起来好像有效!
我真的很感谢有人检查并验证我的努力。