3 votes

Comment supprimer uniquement les caractères entre crochets [ ] d'une chaîne de caractères ?

J'ai donc cherché pendant des heures comment faire cela via AppleScript et je ne vois aucun article à ce sujet.

En gros, j'ai la chaîne suivante :

@junior_cat23, [ID]-[E9B-Z8X-H1V-722]

Je veux que le script ne supprime que cette partie :

, [ID]-[E9B-Z8X-H1V-722]

Il ne me reste donc que :

@junior_cat23

J'utilise les "délimiteurs d'éléments de texte d'AppleScript", mais le problème est que cela supprime également les caractères du texte que je veux conserver.

Voici le script que j'utilise :

set theName to "@junior_cat23, [ID]-[E9B-Z8X-H1V-722]"

tell application "Finder"

    -- Remove Characters

    set oldDelims to AppleScript's text item delimiters
    set the_strings_to_strip to {"[", "]", "-", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"}

    set the_files to theName
    repeat with a_file in the_files
        set the_name to theName
        repeat with I from 1 to count of the_strings_to_strip
            set AppleScript's text item delimiters to item I of the_strings_to_strip
            set the_text_items to text items of the_name
            set AppleScript's text item delimiters to ""
            set the_name to the_text_items as string
        end repeat
    end repeat

    -- Remove Preceding and Trailing Spaces in String

    set trimName to "echo \"" & the_text_items & "\" | xargs"
    set nameTrimmed to (do shell script trimName)
end tell

J'obtiens le résultat suivant :

"@_,"

Je veux juste enlever les caractères du côté des parenthèses et garder les autres. J'apprécierai une solution qui ne nécessite pas de gestionnaire puisque je vais utiliser le script avec une application qui n'accepte pas les gestionnaires.

0 votes

C'était rapide. Merci beaucoup. Je n'arrive pas à croire qu'une solution aussi simple soit si difficile à trouver.

0 votes

Veuillez indiquer toutes les exigences lorsque vous posez une question ! N'introduisez pas de variables secondaires après coup !

0 votes

Que faire si j'ai plusieurs noms, par exemple "@junior_cat23 @james_cat24 [ID]-[E9B-Z8X-H1V-722]" et que je souhaite conserver les deux alors que la chaîne ne contient pas de virgules ?

4voto

user3439894 Points 52496

Réponse actualisée

C'est la méthode la plus directe pour atteindre l'objectif :

Exemple AppleScript code :

set theName to "@junior_cat23, [ID]-[E9B-Z8X-H1V-722]"

set theName to ¬
    characters 1 thru ¬
        ((offset of "," in theName) - 1) ¬
            of theName as string

Résultat :

@junior_cat23

Pour répondre au commentaire :

Que faire si j'ai plusieurs noms, par exemple "@junior_cat23 @james_cat24 [ID]-[E9B-Z8X-H1V-722]" et que je veux les conserver tous les deux alors que la chaîne ne comporte pas de virgules ?

Exemple AppleScript code :

set theName to "@junior_cat23 @james_cat24 [ID]-[E9B-Z8X-H1V-722]"

set theName to ¬
    characters 1 thru ¬
        ((offset of "[" in theName) - 2) ¬
            of theName as string

Résultat :

@junior_cat23 @james_cat24

Réponse originale

L'une des raisons pour lesquelles vous n'avez pas obtenu le retour que vous souhaitiez est dans certains cas AppleScript n'est pas sensible à la casse et l'enveloppement de l -- Remove Characters code dans un considering case bloc gère certains des problèmes, mais pas tous. De plus, puisque vous avez des caractères numériques à la fois dans ce que vous voulez conserver et dans ce que vous ne voulez pas conserver, alors tel qu'il est codé actuellement, il supprime tous les caractères numériques.

Alors que votre code pourrait être retravaillé, mais je ne suis pas enclin à le faire car, tant dans les commentaires supprimés que dans les commentaires existants, vous avez omis des informations essentielles dans l'OP. Cela dit, je vais supposer pour l'instant que toutes les cibles de l'enquête ont été identifiées. cordes aura soit , [ ... ] ou [ ... ] qui doit être retiré et les éléments suivants sed commande gère l'exemple valeur de theName variable dans votre OP et dans les commentaires.

Donc si vous avez :

set theName to "@junior_cat23, [ID]-[E9B-Z8X-H1V-722]"

Ou :

set theName to "@junior_cat23 @james_cat24 [ID]-[E9B-Z8X-H1V-722]"

Ensuite :

do shell script "sed -E -e 's|\\[.*||' -e 's|,||g' -e 's|^[ ]+||' -e 's|[ ]+$||'<<<" & theName's quoted form

       - Conseil : Passez la souris et faites défiler horizontalement pour voir le code complet.

Les retours :

@junior_cat23

Ou :

@junior_cat23 @james_cat24

Sans fil conducteur ni fil conducteur espaces .


Comprendre le do shell script y sed commandes :

  • do shell script -- Exécute un shell script en utilisant la commande sh coquille.
  • sed -- Rédacteur en chef.
  • -E -- Interpréter les expressions régulières comme des expressions régulières étendues (modernes) plutôt que des expressions régulières de base (BRE). La page de manuel re_format(7) décrit complètement les deux formats.
  • e commande -- Ajouter le commandes d'édition spécifié par le argument de commande à la liste des commandes .
  • 's|\\[.*||' -- Enlève tout ce qui se trouve dans le premier [ caractère à la fin de la ligne .
  • 's|,||g' -- Supprime tous les virgules s'ils existent.
  • 's|^[ ]+||' -- Supprime tous les espaces de tête s'ils existent.
  • 's|[ ]+$||' -- Supprime tous les espaces résiduels s'ils existent.
  • <<< -- Cordes ici - Une variante de documents ici le format est : [n]<<< word - Le mot subit l'expansion des accolades, l'expansion du tilde, l'expansion des paramètres et des variables, la substitution des commandes, l'expansion arithmétique et la suppression des guillemets. L'expansion des noms de chemin et le fractionnement des mots ne sont pas effectués. Le résultat est fourni à la commande sous forme de chaîne unique, avec une nouvelle ligne ajoutée, sur son entrée standard (ou son descripteur de fichier). n si n est spécifié).
  • & theName's quoted form -- Ajoute la citation unique valeur de la variable theName à la fin de la ligne de commande de la sed commande dans le do shell script commande afin de ne pas étendre caractères spéciaux du shell dans le valeur de la variable theName s'il existe.

0 votes

C'est exactement ce dont j'ai besoin. J'aurais dû le formuler comme vous l'avez fait : "toutes les chaînes cibles auront soit , [ ... ] soit [ ... ]". En fait, je veux juste supprimer tout ce qui se trouve entre les crochets et ceci fait l'affaire.

0 votes

@David, j'ai ajouté une rubrique "Comprendre la do shell script y sed commandes "à la fin de la réponse.

0 votes

Bon travail ! Directement sur la liste de lecture ! Votez !

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X