Извлечение текста между двумя строками неоднократно в AppleScript - PullRequest
2 голосов
/ 09 апреля 2019

Я один из многих новичков AppleScript здесь, сейчас он в 3 часа ночи, и я сделал все возможное чтение, которое я могу, я до сих пор не нашел свой ответ. Надеюсь, некоторые эксперты могут пролить свет.

Я ищу, чтобы извлечь многократные значения между двумя строками из блока HTML-кода REPEATEDLY. (Блок строки html, полученный с помощью javascript для поиска определенного идентификатора / класса с сайта)

После нескольких часов поиска / чтения я обнаружил, что многие обсуждают это, используя разделители текстовых элементов 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 для удаления всего текста, не находящегося между двумя строками , кто-то дал простой сценарий оболочки, который достиг того, о чем просил ОП (и, безусловно, ближе всего к тому, что я хочу сделать) ). Я бы хотел взять это, но я не знаю, как изменить сценарий оболочки как нуб.

Большое спасибо!

EDIT: По одной из просьб эксперта я добавляю пример строки и ожидаемый вывод, чтобы продемонстрировать свою цель.

<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>

Цель состоит в том, чтобы получить идентификатор клиента, имя и адрес электронной почты учетной записи.

С помощью метода, предоставляемого wch1zpink, я смог стереть все html-строки, но тогда это представляет большую проблему, так как теперь у меня есть все нужные мне значения в виде одной длинной строки, которую нельзя разделить. Я понимаю, что это нелегкая задача, и я, возможно, совсем не подхожу к этому в правильном направлении. Я очень ценю вашу помощь!

PS. Я думал о том, чтобы скрипт нашел любой текст, который появляется между ">" и "<". Если ">

EDIT2: Вместо того, чтобы извлекать 3 значения одновременно из длинного несогласованного блока строк, я решил использовать разные методы для извлечения каждого значения по отдельности и предварительно достигнуть своей цели. Метод стирания, предоставляемый wch1zpink, оказался очень полезным. Еще раз спасибо всем за участие!

PSS. Я приветствую любые будущие дополнительные комментарии / отзывы / предложения! : D

1 Ответ

0 голосов
/ 09 апреля 2019

Этот код 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...