Encuentre la secuencia del último dígito consecutivo en una cadena con Applescript

-2

En mi script tengo cadenas como G014_1998_24.jpg o G024_2006_08.jpg . De estas cadenas necesito extraer los últimos dígitos consecutivos a través de Applescript. Por lo tanto, en mis cadenas de ejemplo, necesitaría recuperar las secuencias 24 o 08 (este último preferiblemente con el cero inicial).

¿Hay alguna manera de hacer esto con un Applescript?

Editar: Las cadenas también podrían tener este aspecto: G014_1998.jpg , G014_1998_A.jpg , G014_1998_AB.jpg etc. (en estos casos, el script siempre debe recuperar 1998 ). Así que realmente estoy buscando la última secuencia de dígitos y no puedo confiar en la posición de estos dígitos, ya que no puedo predecir las posiciones.

    
pregunta mdomino 18.01.2018 - 00:06

2 respuestas

1

Dos métodos posibles:

AppleScript puro

    set alphabet to "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

    set the text item delimiters of AppleScript to ¬
        {space} & characters of the alphabet & {".", "_"}
    set a to text items of "G024_2006_08.jpg" as text
    set b to text items of "G014_1998_AB.jpg" as text

    get last word of a --> returns "08"
    get last word of b --> returns "1998"

Ayuda de Bash

Si sus nombres de archivo son aún más complejos, use do shell script y una coincidencia de expresión regular:

    set filename to "G014_1998_AB.jpg"

    return do shell script (["echo ", filename, ¬
        " | egrep -o -e '\d+' | tail -1"] as text)

    --> returns "1998"

Gracias a @ user3439894 por sugerir que implemento tail como parte del script de shell en lugar de usar el comando get last paragraph of de AppleScript. Es un poco más pulido.

    
respondido por el CJK 18.01.2018 - 13:00
1

Esto me funciona con la última versión de Sierra

property myStrings : {"G014_1998_24.jpg", "G024_2006_08.jpg"}

set strippedStrings to {}

repeat with i from 1 to number of items in myStrings
    set this_item to item i of myStrings
    set end of strippedStrings to items -5 thru -6 of this_item as string
    -- uncomment next line if u prefer integers returned instead (wont retain leading zero's)
    -- set end of strippedStrings to items -5 thru -6 of this_item as string as integer
end repeat

Si desea poder ordenar su lista en orden ascendente, esta versión del script usa la adición de scripts SATIMAGE Adición de scripts

property myStrings : {"G014_1998_24.jpg", "G024_2006_08.jpg", "G024_2006_13.jpg"}
property sortedStrippedStrings : {}

set strippedStrings to {}

repeat with i from 1 to number of items in myStrings
    set this_item to item i of myStrings
    set end of strippedStrings to items -5 thru -6 of this_item as string
end repeat
-- Uses SATIMAGE scripting addition to sort list ascending 
set sortedStrippedStrings to sortlist strippedStrings with ascending
    
respondido por el wch1zpink 18.01.2018 - 00:39

Lea otras preguntas en las etiquetas