在AppleScript中重复提取两个字符串之间的文本

时间:2019-04-09 10:04:38

标签: applescript

我是这里的许多AppleScript初学者之一,现在凌晨3点在这里,我已经尽了一切可能,但我仍然找不到答案。希望一些专家能有所启发。

我想从html代码块中重复提取两个字符串之间的多个值。 (使用javascript从网站中查找特定ID /类所获得的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。 我考虑过让脚本查找在“>”和“ <”之间出现的任何文本。如果发生“> <”,则没有任何值继续。最后,它应该给我我需要的值以及诸如“名称:”或“标题:”之类的值。然后,如果可以将输出逐项列出,则可以按编号获取项目。 Ofc,只是一个菜鸟说话,我希望我能知道。

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

PSS。 我欢迎任何其他其他评论/反馈/建议! :D

1 个答案:

答案 0 :(得分:0)

此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