首页 > 解决方案 > 正则表达式匹配澳大利亚分类委员会使用的评级

问题描述

我之前试图通过抓取 HTML 来制作一个列表,但我意识到同样的模式发生了两次,我希望首先出现的数据紧随其后的是相同的数据,但其中一个澳大利亚分类字母作为字符串。

一个人将如何只匹配分类评级,以及如何在跳过不想要的模式的同时匹配所需的模式?

示例: <a href="url" title="Name">Name</a>和一个类似的,除了<a href="url" title="Name">Rating</a>. 旨在匹配Name第一个示例的全部或全部。

目前的尝试包括:

注:澳大利亚分级委员会有多个等级包括:CTC、G、PG、M、MA15+、R18+和X18+;全部(几乎)仅以大写形式使用。

注意(再次):正则表达式的类型并不重要。

标签: regexweb-scraping

解决方案


关于您尝试的最后一个模式:

如果你把这些值放在一起,(MA15\+)(PG)(G)(M)(R)这意味着它会匹配一个字符串MA15+PGGMR

如果将它放在方括号之间,就像[(?!(MA15\+)(PG)(G)(M)(R)]它是与列出的字符之一匹配的字符类一样。


您可以使用负前瞻列出备选方案,并使用 a|表示交替。

<a href="[^"]*" title="(?!(?:CTC|P?G|M(?:A15\+)?|[RX]18\+)")([^"]*)">\g1</a>

解释

  • <a href="[^"]*" title="字符串的开头,使用否定字符类[^匹配任何字符,除了"
  • (?!负前瞻,资产直接在右边不是
    • (?:CTC|P?G|M(?:A15\+)?|[RX]18\+)"匹配选项之一,然后是结束"
  • )关闭前瞻
  • ([^"]*)">捕获组 1,匹配 0+ 任何字符,除了'后跟匹配 a>
  • \g1匹配与第 1 组匹配的相同文本
  • </a>匹配字符串的结尾部分

正则表达式演示


推荐阅读