Je n'utilise aucun langage de codage particulier, simplement un programme avec "trouver" et "remplacer" où les deux champs utilisent Regex. Par exemple, la phrase
(.)\1
se transformerait en
tooo many professsionals
Je veux "trouver" toutes les occurrences de lettres doubles, ce que je sais peut faire avec
too many professionals
Ce qui me trouble, c'est le bit "prendre la lettre doublée et la tripler". Y a-t-il un symbole dans Regex qui fait référence au "personnage actuel" ou quelque chose comme ça?
EDIT: Merci à tous pour vos suggestions. Il s'avère que le champ "remplacer" n'utilise pas, en fait, Regex, ce que l'OMI est un bullcrap, et ma question est maintenant sans valeur.
5 Réponses :
Votre motif actuel (.) \ 1
qui utilise une référence arrière, est sur la bonne piste. Essayez cette recherche et remplacez:
Find: (.)\1 Replace: $1$1$1
Cette approche correspond à n'importe quelle lettre simple suivie de la même lettre, puis remplace cette paire par trois de la même lettre.
Cela fait presque partie de votre question :).
Cela dépend également de la saveur de regex que vous utilisez.
Par exemple. pour gnu sed, c'est
$ echo 'ffoobarr' | sed -e 's/\(.\)\1/\1\1\1/g' fffooobarrr
Donc, pour le tripler, j'ai juste utilisé \ 1 \ 1 \ 1
comme motif de remplacement. p >
L'expression de
Tim est incorrecte, car (.)
fait référence à n'importe quel caractère, ce que nous ne souhaitons pas remplacer. Nous souhaitons uniquement remplacer les lettres (anglaises) ou [A-Za-z]
.
La bonne façon de le faire pourrait être une expression avec un indicateur i
:
const regex = /([a-z])\1/gmi; const str = `too many professionals would turn into tooo many professsionals`; const subst = `$1$1$1`; // The substituted value will be contained in the result variable const result = str.replace(regex, subst); console.log('Substitution result: ', result);
ou peut-être une expression sans indicateur i
:
([A-Za-z])\1
([a-z])\1
jex.im visualise les expressions régulières:
Double pour tripler
Rechercher (? m) (?: ([a-zA-Z]) (?! \ 1) | ^) (([a-zA-Z]) \ 3 ) (?! \ 3)
Remplacez $ 1 $ 2 $ 3
https: // regex101. com / r / tOpl82 / 1
Expliqué
(?m) # Multi-line mode (?: ( [a-zA-Z] ) # (1), Character behind (?! \1 ) # not a dup. | # or, ^ # BOL ) ( # (2 start) ( [a-zA-Z] ) # (3), Character to dup check \3 # this is duped. ) # (2 end) (?! \3 ) # The dup can't be a triple
Seule réponse, cela tient compte du fait que les lettres déjà triples ne devraient probablement pas être "quadruplées" et ne seront pas mises en correspondance =)
Une autre idée en tenant compte du fait que déjà trois lettres ne devraient pas être attachées à une quatrième.
$1$3$3$3
Remplacez par:
(([A-Za-z])\2\2+)|(\w)\3
L'idée est de capturer en groupe un triplet ou plusieurs lettres |
ou en groupe 3 les doubles lettres. L'un ou l'autre des groupes peut correspondre: groupe 1 ou groupe 3. En remplacement, l'un ou l'autre des groupes serait toujours vide.
Pouvez-vous nous montrer un exemple d'une entrée dont vous disposez et de la sortie que vous attendez?
La syntaxe à utiliser lors du remplacement par un groupe de capture dépend de l'implémentation. Cela peut être
\ 1
, cela peut être$ 1
, ou peut-être autre chosequelle sera la sortie souhaitée en cas de
tooo
?