Applescript中的高效字符串编辑

时间:2015-02-18 00:34:59

标签: sed terminal applescript

我正在写一个需要取字符串的AppleScript,只输出该字符串中的数字。我有一个有效的方法

do shell script "sed s/[a-zA-Z\\']//g <<< " & s

其中s是输入字符串,但是这个脚本正在进行数千次这样的操作,它最终会花费大约20分钟来完成它们。有什么方法可以让它更快吗?

预期输入是一个字符串,几乎可以包含任何内容(除了/\除外。我试图让没有空白字符,因为这会破坏我的方法,但有时我会得到一个仍然)。预期输出是一串数字(或空字符串)。例如,“1人为51罐啤酒支付1,23美分”的句子将具有简单的“112351”的期望输出,并且“我h8处理所有这些麻木”将输出“83”

4 个答案:

答案 0 :(得分:2)

如果你真的必须一次从字符串中选择数字,那么这种方法可能更快,即使看起来更多,但我应该告诉你,指定tr命令的完整路径,如果只是几毫秒的话就会节省一些。

set mlist to "1 man paid 1,23 cents for 51 can\\'s of beer "
 script o
    property l : missing value
 end script
 set o's l to words of mlist
 repeat with i from 1 to (count o's l)
    try
        item i of o's l as integer
    on error
        set item i of o's l to missing value
    end try
 end repeat
 set o's l to o's l's text

 set tids to my text item delimiters
 set my text item delimiters to space
 set o's l to text items of o's l
 set my text item delimiters to tids
 set o's l to o's l as text
 set my text item delimiters to ","
 set o's l to text items of o's l
 set my text item delimiters to tids
 set numb3rs to o's l as text

 log numb3rs
 --> (*112351*)

这种方法可能会更快,因为你为每一行保存了do shell脚本的开销,如果这些数字形成良好(正确的小数点分隔符),它也应该只返回数字。我没有通过电子记谱法尝试过,但我认为这也应该有效。

答案 1 :(得分:1)

你试过tr吗?

 tr -d '[:alpha:][:punct:]' <<< string

答案 2 :(得分:0)

另一种解决方案,确保只显示数字:

do shell script "echo " & quoted form of s & "|sed s/[^0-9]//g"

答案 3 :(得分:0)

我提供这个备用代码。我不明白为什么McUsr的代码需要那么复杂。

set s to "1 man paid 1,23 cents for 51 can\\'s of beer "
set n to ""

repeat with i from 1 to (length of s)
    set c to (character i of s)

    # http://stackoverflow.com/questions/20313799
    if class of c is number then
        set n to n & c
    end if

end repeat

return n