Skip to main content
Liphou
Inspiring
February 9, 2021
Answered

[GREP] lookbehind vs \K

  • February 9, 2021
  • 4 replies
  • 5580 views

Bonsoir à tous,

Je suis en Indesign 2021, sur mac OS «BIG SUR»

j'utilé le commande Lookbehind « (?<=\d+\.) » ceci ne marche plus comme mais comme ça (?<=\d\.) ... Après quelque recheche, il est recommndé de passer à la commende \K, cette comme de à des problèmes!!!

 

exemple voir images par étape.

la base de la recheche.

   

Premièr passage : il en trouve 83 (pas le 1. et ni le 3.)

Deuxième passage : il en trouve 21 (toujours pas le 1.)

Troisième passage :  il en trouve 0 !!!??? (toujous pas le 1. et d'autre )

 

Quatrième passage en suppriment le format de recheche : enfin il trouve le premier paragraphe «1.» et 151 autres

 

Voilà, quelqu'un peux m'expliqué ce qui ne fonctionne pas, ou se que je fais de mal dans la commande?

Ou cette commande (\K) est si peut fiable ? 

 

Merci à vous

 

Philou (bien enbété)

PS. je ne traduit pas avec Google, sous le poste clic sur tranlation merci à vous

This topic has been closed for replies.
Correct answer jctremblay

Tu ne peux pas utiliser de quantificateurs dans les lookbehind. Donc pas de +, ni de * ou ?

C’est sûrement pour cela qu’on ta recommander d’utiliser \K

Il semble y avoir un bogue (j’ai vu ça fréquemment) avec la combinaison de ^ et de \K
Tu peux contourner cela avec (?s)^\d+\.\K\h

4 replies

Liphou
LiphouAuthor
Inspiring
February 10, 2021

cet commande est apparu il y a quelque année (4 ou 5 ans) si mes souveneir son bon,  ce que je ne comprand pas, c'est le manque de présition de la comme \K, relance plusieur fois, pour qu'il trouve pour qu'il entrouve à chaque fois, et être bloqué par une option de style de parragraphe, c'est pas normal !! et c'est pour ca que je ne l'utilise pas, se côté allétoire n'est pas possible en production de livres.

(voir fichier joint desolé il ne veux pas prandre mon idml, donc CC2021 voici un lien pour idml https://www.dropbox.com/s/okwmys6qs00ddgf/testedebase.idml?dl=0).

ou je l'utilise mal !!

 

   

Peter Kahrel
Community Expert
Community Expert
February 10, 2021

le non fonctionnement avec +,* et ?, c'est nouveau ???

 

No, it's not new. It's standard behaviour in all regular-expression dialects, and was described in detail by Friedl (Mastering Regular Expressions)

 

cette commande fonctionne : "(?<=[\d+]\.)\s"

 

It does indeed. Which is bizarre and unexpected (for me, anyway). (?<=[\d+]\.)\s works, (?<=\d+\.)\s does not. Looks like a bug, but one that improves the behaviour. Tant mieux!

 

P.

jctremblay
Community Expert
Community Expert
February 10, 2021

You can have variable-length items in lookaheads, so instead of 

((?=ans?)|(?=jours?))

you can use 

(?=(an|jour)s?)

 


@Liphou  Like Peter said, variable-length is possible in lookahead (not in lookbehind).

pixxxelschubser
Community Expert
Community Expert
February 9, 2021

If I understand you right - try to use

\r\d+\.\K\h

and then manually change the very first occurrence.

 

It could be the same behaviour like here:

indesign.uservoice.com/forums/601180-adobe-indesign-bugs/suggestions/41635084-grep-position-marker-beginning-of-paragraph

 

----------------

But only one question:

Why don't you use auto-numbering in paragraph format?

 

Liphou
LiphouAuthor
Inspiring
February 10, 2021

Bonjour Pixxxelschubser, merci pour ta contribution.

jctremblay
Community Expert
jctremblayCommunity ExpertCorrect answer
Community Expert
February 9, 2021

Tu ne peux pas utiliser de quantificateurs dans les lookbehind. Donc pas de +, ni de * ou ?

C’est sûrement pour cela qu’on ta recommander d’utiliser \K

Il semble y avoir un bogue (j’ai vu ça fréquemment) avec la combinaison de ^ et de \K
Tu peux contourner cela avec (?s)^\d+\.\K\h

Liphou
LiphouAuthor
Inspiring
February 10, 2021

Bonjour Jean-Claude, le non fonctionnement avec +,* et ?, c'est nouveau ???, j'ai des pages de commande avec un multi-find change maison !!!

ex:

grep	{findWhat:"(?<=[\\d+])\\p{Zs}(et|à)\\p{Zs}(\\d+|[sS]\\.)"}	{changeTo:" $1~S$2"}	{includeFootnotes:true, includeMasterPages:true, includeHiddenLayers:true, wholeWord:false}	// philou modifié du 17 janvier 2011

cette commande fonctionne : "(?<=[\d+]\.)\s"

jctremblay
Community Expert
Community Expert
February 10, 2021

Le non-fonctionnement avec +,* et ?, ce n’est pas nouveau. C’est une limitation que l’on retrouve dans le Regex.

Ton (?<=[\d+]\.)\s fonctionne, seulement à cause que tu n’as pas spécifié de début de paragraphe (?<=^[\d+]\.)\s et que tu as mis le \d dans un jeu de caractères. En fait tu recherches un chiffre ou le signe plus. Les +,* et ? entre [] ne sont plus des quantificateurs, mais le caractère littéraux dans ce cas.

jmlevy
Community Expert
Community Expert
February 9, 2021

J'ai un peu de mal à comprendre ce que tu recherches : dans le titre du message, tu parles de « Lookbehind »? Tu écris aussi que tu utilises la commande « (?<=\d+\.) », mais dans les captures d'écran, ta recherche est complètement différente : (^\d+\.)…

Si tu recherches à remplacer un ou plusieurs chiffre(s) suivi(s) d'un point, ^\d+\. fonctionne très bien. Ou alors tu recherches les espaces qui sont précédées d'un ou plusieurs chiffre(s) suivi(s) d'un point ? dans ce cas, cette commande fonctionne : 

(?<=\d\.)\s

Liphou
LiphouAuthor
Inspiring
February 10, 2021

Bonjour jmlevy,

Comme indiqué dans la question cette commande ne fonction plus ou pas ( malgré des année d'utilisation).

effetivement le grep suivant fonction mais je ne teste pas avec le "^" dans le groupe

 

Liphou
LiphouAuthor
Inspiring
February 10, 2021

(?<=\d\.)\s, sa recheche les chiffres de 0 à 9 n'import où, je recherche un nombre (pas un chiffre) en début de ligne  (pas ailleurs), merci pour ta contribution.