Regex pour changer les nombres à une valeur inférieure de 1

1

J'ai une regex que j'utilise qui change les nombres et augmente la valeur, donc si theres un 1 dans mon txt je le transforme en 2, un 0 à 1 et ainsi. J'ai essayé de créer une nouvelle expression rationnelle qui diminue la valeur de 1, de sorte qu'elle transforme un 4 en 3, un 9 en 8 et ainsi de suite. Mais je suis coincé, je ne peux pas le comprendre, je vais mal poster la regex actuelle que j’utilise et quelques exemples

(0)|(1)|(2)|(3)|(4)|(5)|(6)|(7)|(8)|(9) 

Remplacement

(?{1}1)(?{2}2)(?{3}3)(?{4}4)(?{5}5)(?{6}6)(?{7}7)(?{8}8)(?{9}9)(?{10}0)

Maintenant, je me demande s’il est possible d’utiliser cette même formule mais de diminuer les nombres.

exemples

james66
fire1
dog 2
lier9

à

james55
fire0
dog1
lier8
lothbrok76
la source

Réponses:

1

C'est presque pareil, il suffit de changer les valeurs:

Trouver:

(1)|(2)|(3)|(4)|(5)|(6)|(7)|(8)|(9) 

Remplacer:

(?{1}0)(?{2}1)(?{3}2)(?{4}3)(?{5}4)(?{6}5)(?{7}6)(?{8}7)(?{9}8)

Et vous devez savoir comment vous souhaitez remplacer 0

Mais vous feriez mieux d'écrire un petit script dans votre langage de script préféré.

Toto
la source
pourriez-vous expliquer cela? Par exemple, habituellement avec find and replace et regexes, nous voyons potentiellement beaucoup de syntaxe regex dans la recherche, et dans le remplacement, nous voyons du texte brut ou \ 1 \ 2 \ 0 ou $ 0 $ 1 $ 2 Mais vous montrez à quoi ressemble un peu non -capturer les parenthèses (? ...) dans le remplacement. Et pourriez-vous expliquer le but des accolades ici. Normalement, lorsque je vois des accolades, elles sont répétitives, comme 5 {3}. Je vois ce que vous avez posté fonctionne pour changer james66 en james56 j’essaie juste de voir pourquoi?
barlop
1
@barlop: Il est appelé remplacement conditionnel, (?{1}0)signifie if group 1 is set, then replace it with 0. Le groupe 1 est défini dans la partie recherche lorsque nous rencontrons le chiffre 1. Les mêmes règles s'appliquent à tous les chiffres.
Toto