У AppleScript, який найпростіший спосіб видалити всі розділові знаки з рядка?


5

У мене є служба автоматизації, яка складається з однієї дії "Запустити AppleScript" . Служба отримує вибране textв any application.

Служба включає цей вибраний текст у заздалегідь визначений формат URL. Потім Сервіс відкриває щойно зібрану URL-адресу на новій вкладці у вікні веб-браузера.

Ось рядок, який може отримати Служба:

Мій завод мертвий! (Але, кого турбує? У мене 12 рослин.)

Я хочу використовувати AppleScript для видалення будь-якого пунктуаційного символу, що існує в рядку, включаючи пробіли. Мені також потрібна конвертація рядка для всіх малих символів. Числа не слід видаляти з рядка.

Отже, бажаний рядок:

myplantsdeadbutwhocaresihave12plants

Я розумію, що я можу досягти бажаного ефекту, написавши індивідуальне text item delimitersвисловлювання для кожного можливого пунктуаційного символу та для 26 великих літер. Я міг би використовувати replace_charactersпідпрограму, щоб зробити цей метод трохи охайнішим.

Чи є простіший або коротший спосіб досягти цього ефекту в AppleScript, на відміну від використання десятків text item delimitersблоків? Наприклад, один рядок коду, який зменшує рядок до літер?

Я знаю, що в інших мовах програмування є ярлик "пунктуація смуги", ось чому я запитую.

Це, по суті, специфічне для AppleScript питання "Code Golf" .

Відповіді:


3

Спробуйте наступне:

set stringToConvert to "My Plant's Dead! (But, Who Cares? I Have 12 Plants.)"
set returnedString to do shell script "echo " & quoted form of stringToConvert & " | tr -dc '[:alnum:]' | tr '[:upper:]' '[:lower:]'"

Він повертає: myplantsdeadbutwhocaresihave12plants

tr команди пояснили:

  • tr -dc '[:alnum:]' видаляє всі буквено-цифрові символи (включаючи пробіл).
  • tr '[:upper:]' '[:lower:]' перетворює всі великі регістри в малі регістри.

Дивіться сторінку чоловіка для tr.


Дякую за те, що я звернув увагу на цифри Я зовсім забув про це.
сфера

@ rubik сфера, Автокоригування змінено alnumна album, тож це зараз правильно.
користувач3439894
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.