Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Re: Aide Utomator

1 view
Skip to first unread message

Olivier Miakinen

unread,
Aug 14, 2022, 6:29:10 AM8/14/22
to
[diapublication avec suivi vers fr.comp.lang.regexp]

Bonjour,

Le 14/08/2022 à 12:04, Brice a écrit :
> Le 13 août 2022 à 17:15, Jean-Pierre Kuypers a écrit :
>
>> [remplacer « (.*\d*.*) n°(\d*) » par « $2 $1 »]
>>
> Extra, je viens de tester et c'est merveiiillleeeuux,
> Pourrais-je avoir des explications sur les .*\d et $1, $2 ?

Voici les explications détaillées sur ces expressions rationnelles
(regexp).

. = n'importe quel caractère
.* = n'importe quel caractère, n'importe quel nombre de fois
\d = un chiffre
\d* = n'importe quel nombre de chiffres
(...) = capture de la sous-chaîne
$1 = ce qu'il y avait dans le premier (...)
$2 = ce qu'il y avait dans le deuxième (...)


Reprenons l'exemple de Jean-Pierre :
nom prenoms 5678 ville n°1234.jpg

Je vais mettre en dessous de l'exemple ce qui est capturé par quoi :
nom prenoms 5678 ville n°1234.jpg
( .* \d* .* ) n°(\d*).jpg

Le $2 est donc "1234" tandis que le $1 est "nom prenoms 5678 ville",
d'où le résultat, sachant que le .jpg n'est pas traité par la regexp
et reste donc inchangé :
1234 nom prenoms 5678 ville.jpg

[Attention, j'ai positionné le suivi vers le groupe adapté aux
discussions sur les regexp, à savoir fr.comp.lang.regexp]


--
Olivier Miakinen

Jean-Pierre Kuypers

unread,
Aug 14, 2022, 10:29:17 AM8/14/22
to
In article (Dans l'article) <tdavuk$35q7o$2...@dont-email.me>, Brice
<tr...@bidule.fr.invalid> wrote (écrivait) :

> Le 14 août 2022 à 14:29, M.V. a écrit :
> > Et si le dossier ciblé contient des éléments "perturbateurs" du style :
> > nom prenoms 5678 ville n°vTr.jpg
> > nom prenoms 5678 ville 1234.jpg
> > nom prenoms 5678 ville n°.jpg
> > Que deviennent ces éléments qui devraient rester inchangés ?
>
> Avec NameChanger et la formule de Jean-Pierre, ces fichiers ne changent
> pas de nom. J'avais un tel fichier dans ma série.

Indique-nous le nom du fichier et on verra ce qu'on peut faire.

Suivi à fr.comp.lang.regexp

--
Jean-Pierre Kuypers

Otomatic

unread,
Aug 14, 2022, 11:53:20 AM8/14/22
to
Olivier Miakinen <om+...@miakinen.net> écrivait :

> . = n'importe quel caractère
> .* = n'importe quel caractère, n'importe quel nombre de fois
Puis-je me permettre quelques petites précisions ?

. Remplace n'importe quel caractère, hormis le caractère de nouvelle
ligne (par défaut)
* n'importe quel nombre de fois. N'importe quel nombre incluant 0 fois.

Documentation Regexp PCRE pour PHP :
https://www.php.net/manual/fr/reference.pcre.pattern.syntax.php

Olivier Miakinen

unread,
Aug 14, 2022, 12:00:50 PM8/14/22
to
Le 14/08/2022 à 17:53, Otomatic a écrit :
>
>> . = n'importe quel caractère
>> .* = n'importe quel caractère, n'importe quel nombre de fois
> Puis-je me permettre quelques petites précisions ?
>
> . Remplace n'importe quel caractère, hormis le caractère de nouvelle
> ligne (par défaut)
> * n'importe quel nombre de fois. N'importe quel nombre incluant 0 fois.

[OUI]

Pour une première réponse à Brice je n'ai pas voulu trop rentrer dans
les détails, d'autant qu'il s'agit ici de noms de fichiers dont on
peut supposer qu'ils ne contiennent pas de caractère de nouvelle ligne.

> Documentation Regexp PCRE pour PHP :
> https://www.php.net/manual/fr/reference.pcre.pattern.syntax.php

Merci. Cela dit, je ne sais pas quel type de regexp est utilisé par le
logiciel que Jean-Pierre recommandait à Brice.


--
Olivier Miakinen

Dominique

unread,
Aug 15, 2022, 1:03:15 AM8/15/22
to
Le 14/08/2022 à 12:29, Olivier Miakinen a écrit :

> Voici les explications détaillées sur ces expressions rationnelles
> (regexp).
>
> . = n'importe quel caractère
> .* = n'importe quel caractère, n'importe quel nombre de fois
> \d = un chiffre
> \d* = n'importe quel nombre de chiffres

Bonjour,

J'ai toujours recherché des chiffres avec [0-9]{1,}( comme dans LibreOffice)

Voici un exemple en Pythom avec la librairie re :

modele1='[0-9]{1,3}[:][0-9]{2}[:][0-9]{2}'
modele2='[0-9]{1,3}[:][0-9]{2}[.][0-9]{1,}'

Là, je vérifie la bonne saisie d'un angle ou d'une heure en ddd:mm:ss ou
ddd:mm.mmmmm

Ça fonctionne très bien, mais est-ce correct ?

Merci et bonne journée à tous,

Dominique

Olivier Miakinen

unread,
Aug 15, 2022, 2:51:49 AM8/15/22
to
Bonjour,

Le 15/08/2022 à 07:03, Dominique a écrit :
>
> J'ai toujours recherché des chiffres avec [0-9]{1,}( comme dans LibreOffice)
>
> Voici un exemple en Pythom avec la librairie re :
>
> modele1='[0-9]{1,3}[:][0-9]{2}[:][0-9]{2}'
> modele2='[0-9]{1,3}[:][0-9]{2}[.][0-9]{1,}'
>
> Là, je vérifie la bonne saisie d'un angle ou d'une heure en ddd:mm:ss ou
> ddd:mm.mmmmm
>
> Ça fonctionne très bien, mais est-ce correct ?

Oui, en tout cas avec les regexp de type perl qui sont les plus avancées
on a déjà les équivalences suivantes :
{1,} == +
{0,} == *

C'est le cas en Python : <https://docs.python.org/3/library/re.html>

Mais là où tu as absolument raison, c'est que dans un programme qui
pourrait être sensible et éventuellement sujet à une attaque par un
pirate, il est mille fois préférable d'écrire [0-9] plutôt que \d :

<https://docs.python.org/3/library/re.html>
§
\d

For Unicode (str) patterns:

Matches any Unicode decimal digit (that is, any character in Unicode
character category [Nd]). This includes [0-9], and also many other
digit characters. If the ASCII flag is used only [0-9] is matched.
§


--
Olivier Miakinen

Dominique

unread,
Aug 15, 2022, 3:13:06 AM8/15/22
to
Le 15/08/2022 à 08:51, Olivier Miakinen a écrit :
> Bonjour,
>
> Le 15/08/2022 à 07:03, Dominique a écrit :
>>
>> J'ai toujours recherché des chiffres avec [0-9]{1,}( comme dans LibreOffice)
>>
>> Voici un exemple en Pythom avec la librairie re :
>>
>> modele1='[0-9]{1,3}[:][0-9]{2}[:][0-9]{2}'
>> modele2='[0-9]{1,3}[:][0-9]{2}[.][0-9]{1,}'
>>
>> Là, je vérifie la bonne saisie d'un angle ou d'une heure en ddd:mm:ss ou
>> ddd:mm.mmmmm
>>
>> Ça fonctionne très bien, mais est-ce correct ?
>
> Oui, en tout cas avec les regexp de type perl qui sont les plus avancées
> on a déjà les équivalences suivantes :
> {1,} == +
> {0,} == *

Je ne comprends pas bien ces deux lignes. Pour moi {1,} veut dire 1 ou
plus et {0,} veut dire rien ou plus. Je dois me tromper.

>
> C'est le cas en Python : <https://docs.python.org/3/library/re.html>
>
> Mais là où tu as absolument raison, c'est que dans un programme qui
> pourrait être sensible et éventuellement sujet à une attaque par un
> pirate, il est mille fois préférable d'écrire [0-9] plutôt que \d :
>
> <https://docs.python.org/3/library/re.html>
> §
> \d
>
> For Unicode (str) patterns:
>
> Matches any Unicode decimal digit (that is, any character in Unicode
> character category [Nd]). This includes [0-9], and also many other
> digit characters. If the ASCII flag is used only [0-9] is matched.
> §
>
>

Un grand merci pour tes précisions.

Olivier Miakinen

unread,
Aug 15, 2022, 3:14:47 AM8/15/22
to
Le 15/08/2022 à 08:51, je répondais à Dominique :
>>
>> modele1='[0-9]{1,3}[:][0-9]{2}[:][0-9]{2}'
>> modele2='[0-9]{1,3}[:][0-9]{2}[.][0-9]{1,}'
>>
>> Là, je vérifie la bonne saisie d'un angle ou d'une heure en ddd:mm:ss ou
>> ddd:mm.mmmmm
>
> [...] là où tu as absolument raison, c'est que dans un programme qui
> pourrait être sensible et éventuellement sujet à une attaque par un
> pirate, il est mille fois préférable d'écrire [0-9] plutôt que \d

Par ailleurs, j'aime bien l'idée de protéger le . par [.] plutôt que par
\. et aussi de faire de même avec [:] même si : suffisait.

Ce n'est pas pour une question d'efficacité mais de lisibilité, d'autant
plus que cela fait une jolie symétrie entre les deux formats (celui avec
[:] et celui avec [.]).

Pour la même raison de symétrie entre les deux je comprends parfaitement
l'utilisation de {1,} au lieu de +, faisant le pendant à {2}.


--
Olivier Miakinen

Olivier Miakinen

unread,
Aug 15, 2022, 3:18:44 AM8/15/22
to
Le 15/08/2022 à 09:13, Dominique m'a répondu :
>>
>> Oui, en tout cas avec les regexp de type perl qui sont les plus avancées
>> on a déjà les équivalences suivantes :
>> {1,} == +
>> {0,} == *
>
> Je ne comprends pas bien ces deux lignes. Pour moi {1,} veut dire 1 ou
> plus

Oui. Mais + vaut aussi dire 1 ou plus.

> et {0,} veut dire rien ou plus.

Oui. Mais * veut aussi dire rien ou plus.

> Je dois me tromper.

Donc non, tu ne te trompais pas. J'aurais pu ajouter à la liste {0,1}
qui peut aussi s'écrire avec un simple point d'interrogation.

{1,} == +
{0,} == *
{0,1} == ?

--
Olivier Miakinen

Olivier Miakinen

unread,
Aug 15, 2022, 3:19:34 AM8/15/22
to
[Supersedes <tdcs0j$2el4$1...@cabale.usenet-fr.net>]

Le 15/08/2022 à 09:13, Dominique m'a répondu :
>>
>> Oui, en tout cas avec les regexp de type perl qui sont les plus avancées
>> on a déjà les équivalences suivantes :
>> {1,} == +
>> {0,} == *
>
> Je ne comprends pas bien ces deux lignes. Pour moi {1,} veut dire 1 ou
> plus

Oui. Mais + veut aussi dire 1 ou plus.

> et {0,} veut dire rien ou plus.

Oui. Mais * veut aussi dire rien ou plus.

> Je dois me tromper.

Donc non, tu ne te trompais pas. J'aurais pu ajouter à la liste {0,1}
qui peut aussi s'écrire avec un simple point d'interrogation.

{1,} == +
{0,} == *

Jean-Pierre Kuypers

unread,
Aug 15, 2022, 4:31:27 AM8/15/22
to
In article (Dans l'article) <tdbh38$3878c$1...@dont-email.me>, Brice
<tr...@bidule.fr.invalid> wrote (écrivait) :

> Le 14 août 2022 à 18:00, Olivier Miakinen a écrit :
> > [...] le logiciel que Jean-Pierre recommandait à Brice.
>
> c'est moi qui recommandait à Claudie ce logiciel que j'utilise depuis
> des lustres :-))

Et je te remercie de m'avoir permis de le découvrir.

--
Jean-Pierre Kuypers
0 new messages