3

次のようにAppleScriptで文字列を操作するという課題があります。

  • 基本文字列は、電子メール受信者の表示名です。たとえば、次のようになります。First Last (first.last@hotmail.com)
  • 表示名を「トリミング」して、括弧内の実際のメール アドレスを削除したい
  • 望ましい結果は次のようになるはずです。First Lastそのため、最初のブラケットの前のスペースを削除する必要があります。

AppleScript でこれを行う最善かつ最も効率的な方法は何ですか?

4

3 に答える 3

5

オフセットも使用します。text 1 thru 2 of "xyz"と同等items 1 thru 2 of "xyz" as stringです。

set x to "First Last (first.last@hotmail.com)"
set pos to offset of " (" in x
{text 1 thru (pos - 1) of x, text (pos + 2) thru -2 of x}

私の知る限り、text item delimiters を元に戻す必要はありません

set x to "First Last (first.last@hotmail.com)"
set text item delimiters to {" (", ")"}
set {fullname, email} to text items 1 thru 2 of x

他の人が一般的な文字列操作について検索している場合は、テキストを置き換えて分割し、リストを結合する方法を次に示します。

on replace(input, x, y)
    set text item delimiters to x
    set ti to text items of input
    set text item delimiters to y
    ti as text
end replace

on split(input, x)
    if input does not contain x then return {input}
    set text item delimiters to x
    text items of input
end split

on join(input, x)
    set text item delimiters to x
    input as text
end join

デフォルトでは、文字列比較は大文字と小文字を区別しません。

"A" is "a" -- true
"ab" starts with "A" -- true
considering case
    "A" is "a" -- false
    "ab" starts with "A" -- false
end considering

テキストの反転:

reverse of items of "esrever" as text

do shell script を使用して、テキストの大文字と小文字を変更できます。

do shell script "printf %s " & quoted form of "aä" & " | LC_CTYPE=UTF-8 tr [:lower:] [:upper:]" without altering line endings

echo は、デフォルトで OS X の /bin/sh にあるエスケープ シーケンスを解釈します。shopt -u xpg_echo; echo -nの代わりに使用することもできますprintf %sLC_CTYPE=UTF-8文字クラスにいくつかの非 ASCII 文字を含めます。を省略した場合without altering line endings、改行はキャリッジ リターンに置き換えられ、出力の最後の改行は削除されます。

paragraphs of\n、\r、および \r\n の前後で文字列を分割します。区切り文字を削除しません。

paragraphs of ("a" & linefeed & "b" & return & "c" & linefeed)
-- {"a", "b", "c", ""}

クリップボードのプレーン テキスト バージョンは、CR 行末を使用します。これにより、行末が LF に変換されます。

set text item delimiters to linefeed
(paragraphs of (get the clipboard as text)) as text

Unicode textは10.5以降textと同等です:string

Unicode テキストと非 Unicode テキストの区別はなくなりました。「text」という名前のテキスト クラスは 1 つだけあります。つまり、「foo」のクラスはテキストを返します。

于 2013-04-19T19:21:54.960 に答える
1

次のようなより単純なソリューションを使用することをお勧めします。

set theSample to "First Last (first.last@hotmail.com)"

on trimEmailAddress(sourceAddress)
    set cutPosition to (offset of " (" in sourceAddress) - 1
    return text 1 thru cutPosition of sourceAddress
end trimEmailAddress

return trimEmailAddress(theSample)
-->  "First Last"
于 2013-04-19T11:29:49.290 に答える