【问题标题】:Extract Text Between Two Strings Repeatedly in AppleScript在 AppleScript 中重复提取两个字符串之间的文本
【发布时间】:2019-04-10 06:29:58
【问题描述】:

我是这里的许多 AppleScript 初学者之一,现在凌晨 3 点在这里进行,我已经完成了所有可能的阅读,但我仍然没有找到答案。希望一些专家可以提供一些启示。

我希望从一个 html 代码块中重复提取两个字符串之间的多个值。 (使用javascript从站点中查找特定id/class获得的html字符串块)

经过数小时的搜索/阅读,我发现很多人都在使用 Applescript 的文本项目分隔符来讨论这个问题。然而,到目前为止,他们都只做了一次。

我认为重复声明可能是我的答案,但似乎并不真正适用于此。 (但很可能是因为我太菜鸟了)

这是目前最常用的方法

set AppleScript's text item delimiters to startText
set text1 to text item 1 of InputString
set AppleScript's text item delimiters to endText
set text2 to text item 2 of InputString
set AppleScript's text item delimiters to {""}

问题是,它只执行一次,并不关心输入字符串中是否有多个开始/结束字符串。

在这篇 Applescript to remove all text not between two strings 的帖子中,有人给出了一个简单的 shell 脚本,它实现了 OP 的要求(并且是迄今为止最接近我想要做的)。我希望我能接受,但我不知道如何将 shell 脚本更改为菜鸟。

非常感谢!

编辑: 应一位专家的要求,我正在添加示例字符串和预期输出来证明我的目标。

<div class="table-1"><div class="row"><div class="table-3">Customer ID:</div><div class="table-5">1234567890</div></div><div id="title" class="row"><div class="table-3">Title:</div><div class="table-5"></div></div><div id="customer-name" class="row"><div class="table-3">Name:</div><div class="table-5"><span>FirstName LastName</span>&nbsp;&nbsp;</div></div><div id="primary-email" class="row"><div class="table-3">Primary Email:</div><div class="table-5">test_123@google.com</div></div><div id="customer-email" class="row"><div class="table-3">Account Email:</div><div class="table-5">test_abc@google.com</div></div></div>

目标是获取客户 ID、姓名和帐户电子邮件。

使用 wch1zpink 提供的方法,我能够删除所有 html 字符串,但它提出了一个更大的问题,因为现在我将所需的所有值作为一个无法分隔的长字符串。我知道这不是一件容易解决的任务,而且我可能根本没有朝着正确的方向努力。非常感谢您提供的所有帮助!

PS。 我想过让脚本找到出现在“>”和“

编辑2: 我决定使用不同的方法分别提取每个值,而不是一次从一个长且不一致的字符串块中提取 3 个值,并初步实现了我的目标。 wch1zpink 提供的擦除方法被证明非常有用。再次感谢大家的参与!

PSS。 我欢迎任何未来的额外 cmets/反馈/建议! :D

【问题讨论】:

  • 文本项分隔符和您引用的 shell 脚本都将作用于给定字符串中的所有出现。文本项分隔符也可以拆分为多个分隔字符串。您能否编辑您的问题以提供您正在寻找的示例输入和预期输出?
  • @red_menace 感谢您的评论!我暂时找到了解决方案,方法是不要一次从一个长且不一致的字符串块中寻找多个值。非常感谢!
  • 您可以考虑为那些寻找类似答案的人发布您的解决方案。我只是通过使用textutil 将 HTML 转换为纯文本来作弊,并将生成的段落转储到字典/记录中,您可以在其中获取所需的键。
  • "使用 javascript 从站点中查找特定 id/class 获得的 html 字符串块" 在这种情况下,也可以在 JavaScript 中执行文本过滤,这将更快,并让您可以访问使用正则表达式的强大文本操作方法。

标签: applescript


【解决方案1】:

此 AppleScript 代码适用于我使用最新版本的 macOS Mojave。

-- Define Source Text Here
set fullTextString to "<p>I thought repeat statement</p> <p>After hours of searching/reading</p>"

-- Define As Many Strings As You Want Removed Here
set removeFromFullTextString to {"<p>", "</p>"}

set cleanedText to stripOuterTextTID(fullTextString, removeFromFullTextString)

on stripOuterTextTID(fullTextString, removeFromFullTextString)
    set originalText to fullTextString
    set AppleScript's text item delimiters to removeFromFullTextString
    set tempText to text items of originalText
    set text item delimiters to ""
    set cleanedText to tempText as text
end stripOuterTextTID

【讨论】:

  • 这太棒了!!我一定会把它添加到方法集合中!!唯一的问题是我没有提到的是我试图从 html 字符串块中提取的值。我已根据 red_menace 的要求编辑了我的问题,以提供更多见解。非常感谢您提供的方法!
  • 嗨@wch1zpink 非常感谢您提供这种方法。事实上,在尝试了不同的搜索方法并结合您的擦除方法后,我已经想出了解决方案。已给予信用。非常感谢!
  • @DrewCanaima 您可能会发现此链接非常有价值。 cubemg.com/…
  • 我实际上使用了来自该博客的大量脚本哈哈,我什至联系了博客所有者,但他/她可能不再运营该博客。谢谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-13
  • 2013-05-14
  • 2018-05-11
  • 2018-07-26
  • 2012-11-03
  • 2016-08-02
相关资源
最近更新 更多