Page 1 sur 1

[..] Recherche de caractères

Posté : jeu. 03 déc. 2015 22:49
par Shinai75
Bonjour,

Tout d'abord, bravo pour ce site qui est une véritable mine d'or.
Je débute sur Autoit et je suis confronté à un problème de recherche textuelle.

En clair, je dispose d'un fichier .txt avec beaucoup de texte et dans ce texte je souhaite récupérer des chaînes de caractères numériques préfixées par "/detail/" et suffixées par "?".
La difficulté réside dans le fait que le nombre de chiffres varie, par exemple

/detail/123? => je veux récupérer 123
/detail/123456? => je veux récupérer 123456

Auriez-vous un conseil ou un topic qui pourrait m'aider?
Merci par avance pour votre aide!
Excellente soirée

Re: [Recherche] : aide sur une recherche de caractères

Posté : jeu. 03 déc. 2015 22:56
par jguinch
Première page à lire : http://www.autoitscript.fr/forum/viewto ... f=35&t=595
Ce sont les règles de présentation d'un message. Comme tu pourras le constater, le titre de ton message n'est pas vraiment conforme à cette règle.

Sinon, il faut que tu regardes du côté des fonctions StringMid / StringInStr qui devraient te permettre de faire ce que tu veux.

Re: [..] Aide sur une recherche de caractères

Posté : jeu. 03 déc. 2015 23:00
par Shinai75
Oups, je suis désolé, je viens de corriger
Merci pour votre réactivité et pour votre aide, je regarde l'aide en ce sens :D

Re: [..] Recherche de caractères

Posté : ven. 04 déc. 2015 07:04
par jchd
Tu peux faire comme ça :

Code : Tout sélectionner

#include <Array.au3>

Local $s = _
    "baratin" & @CRLF & _
    "/detail/123 => rien à récupérer car pas de ? à la fin" & @CRLF & _
    "baratin123" & @CRLF & _
    "/detail/123? => peux-tu récupérer 123?" & @CRLF & _
    "baratin456" & @CRLF & _
    "/detail/123456? => oui, ici tu vas récupérer 123456" & @CRLF & _
    "baratin789" & @CRLF

Local $a = StringRegExp($s, "/detail/(\d+)\?", 3)
_ArrayDisplay($a)

Re: [..] Recherche de caractères

Posté : ven. 04 déc. 2015 14:15
par mikell
Le RegExp qui tue :mrgreen:
Note qu'avec le texte de l'exemple de jchd _StringBetween (solution possible) n'est pas adapté
$a = _StringBetween($s, "/detail/", "?") => erreur

Re: [..] Recherche de caractères

Posté : ven. 04 déc. 2015 18:54
par Shinai75
Excellent, merci beaucoup !
je patinais avec un debut de code pas terrible :

StringRegExp('texte', '(?i)detail/(.*)?', $STR_REGEXPARRAYGLOBALMATCH)

merci, merci :D

Re: [..] Recherche de caractères

Posté : ven. 04 déc. 2015 19:14
par orax
Il fallait ajouter un \ pour échapper le ?

Code : Tout sélectionner

(?i)detail/(.*)[b]\[/b]?
car, écrit comme ça, ? ne signifie pas le caractère "?" mais plutôt "0 ou 1 fois".

Re: [..] Recherche de caractères

Posté : ven. 04 déc. 2015 22:45
par mikell
Pas seulement... "(.*)" est 'greedy' donc ça va ramasser le max de caractères non-newline jusqu'au dernier "?" présent sur chaque ligne, et de plus le point ne permet pas de sélectionner juste les chiffres