0

我有来自游戏列表的维基百科页面的以下源代码。我需要从源中获取游戏的名称,它位于 title 属性中,如下所示:

<td><i><a href="/wiki/007:_Quantum_of_Solace" title="007: Quantum of Solace">007: Quantum of Solace</a></i><sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span>[</span>4<span>]</span></a></sup></td>

正如您在上面看到的,在 title 属性中有一个字符串。我需要使用 GREP 在每一行中搜索发生这种情况的时间,并删除除以下内容之外的所有内容:

title="Game name"

我有以下(在 TextWrangler 中)返回每一次出现:

title="(.*)"

我现在如何设置它以删除周围的所有内容,但要确保它单独保留字符串或 title="string"。

4

2 回答 2

1

我使用多步骤方法来处理这类文件。

  1. 首先,您希望每行只有一个 HTML 标记,GREP 适用于每一行,因此您希望尽量减少对复杂模式的需求。我通常将所有:> 替换为 >\n

  2. 然后你想为你想要的项目的每次出现开发一个模式。在这种情况下,'title=". ?"'。把它放在括号()之间。然后,您想在该语句中添加一些填充以查找并替换此模式的所有出现: . ?(标题=“。?”)。

  3. 替换所有匹配的内容。?(title=". ?").* 与 \1
  4. 最后,巧妙地使用包含的 Textwrangler 函数处理行来过滤任何剩余的垃圾。

笔记

\1 指的是 () 之间第一次匹配,您还可以使用多个括号重新排序内容,并使用 (. ?)、 (. ) 和 \2、\1 之类的东西来洗牌。

学习如何做惰性正则表达式。指某东西的用途 ?在这些模式中非常强大。基本上 ?将使模式寻找模式下一部分的下一次出现,而不是模式下一部分出现的最新部分。

于 2014-04-22T14:59:44.590 回答
0

这个问题我已经解决了,很简单。我不会检索标题属性中的内容,而是检索页面名称。

为确保我只在内容所在的位置找到正确的行,我将使用以下字符串来搜索代码。

(. )/wiki/(. )" 返回 \2

之后,我简单地删除任何有 HTML 代码的情况:

<(.*) 返回 ''

最后,我将页面名称后面的剩余内容去掉:

"(.*) 返回 ''

稍微清理一下间距,我就有了所有游戏名称的列表。

于 2013-12-22T03:53:58.150 回答