【发布时间】: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> </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