String AppleScript中的字符串操作

String AppleScript中的字符串操作,string,applescript,data-manipulation,String,Applescript,Data Manipulation,在AppleScript中,我面临如下操作字符串的挑战: 基本字符串是电子邮件收件人的显示名称,例如:First-Last(First)。last@hotmail.com) 我想“修剪”显示名称以删除括号中的实际电子邮件地址 所需结果应为First Last-因此需要删除第一个支架前面的空间 在AppleScript中执行此操作的最佳和最有效的方法是什么?您可能希望使用以下更简单的解决方案: set theSample to "First Last (first.last@hotmail.c

在AppleScript中,我面临如下操作字符串的挑战:

  • 基本字符串是电子邮件收件人的显示名称,例如:
    First-Last(First)。last@hotmail.com)
  • 我想“修剪”显示名称以删除括号中的实际电子邮件地址
  • 所需结果应为
    First Last
    -因此需要删除第一个支架前面的空间

在AppleScript中执行此操作的最佳和最有效的方法是什么?

您可能希望使用以下更简单的解决方案:

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

return trimEmailAddress(theSample)
-->Result: "First Last"

on trimEmailAddress(sourceAddress)
    set AppleScript's text item delimiters to {" ("}
    set addressParts to (every text item in sourceAddress) as list
    set AppleScript's text item delimiters to ""
    set nameOnly to item 1 of addressParts

    return nameOnly
end trimEmailAddress
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"

我也会使用偏移量<代码>文本1到2的“xyz”相当于
项目1到2的“xyz”作为字符串

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}
据我所知

如果其他人一般都在搜索字符串操作,以下是替换和拆分文本以及连接列表的方法:

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脚本更改文本的大小写:

shell脚本“printf%s”和“aä”的引用形式和“|LC_CTYPE=UTF-8 tr[:lower:[:upper:]”不改变行尾

默认情况下,echo在OSX的/bin/sh中解释转义序列;echo-n
而不是
printf%s
LC_CTYPE=UTF-8
使字符类包含一些非ASCII字符。如果省略了不改变行尾的
,换行符将替换为回车符,并删除输出末尾的换行符

的段落
围绕\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
text
string
等效,因为:

Unicode和非Unicode文本之间不再有区别。只有一个文本类,名为“text”:即“foo”类返回文本


很好的解决方案。仅名称部分的提取可以简化为
仅将名称设置为sourceAddress的第一个文本项
,从而无需涉及
地址部分的辅助语句
>“xyz”的文本1到2相当于“xyz”的项1到2就像绳子一样哦!谢谢劳里的提示,我不知道这个!!
set text item delimiters to linefeed
(paragraphs of (get the clipboard as text)) as text