0
votes

Regex: correspond à des parties de la même chaîne mais à l'exclusion d'une partie spécifique

J'ai cette chaîne "acc_or.a5j1.01a" . Maintenant, je veux tout faire correspondre à tout sauf 01 .
Jusqu'à présent, j'ai utilisé le modèle . * \\. qui correspond à tout jusqu'à 01a. Maintenant, je veux aussi correspondre également au dernier caractère "A" (qui peut être n'importe quel caractère). Enfin, je veux tout faire correspondre, sauf 01 (qui peut également être 2 chiffres). Ma question est qu'il y a un moyen de tout capturer et d'exclure les 2 chiffres 01 ?

Edit: J'utilise cela dans r , mon idée était de capturer ces parties afin que je puisse utiliser Sub () fonction et remplacer les pièces assorties avec "" . Ce que je veux enfin, c'est d'obtenir les 2 chiffres.


6 commentaires

Sera-ce 2 matchs distincts, acc_or.a5j1. et a


Non, je voudrais le faire correspondre avec une seule expression. Est-il possible d'ignorer 01 et de correspondre simplement à Acc_OR.A5J1. et a? Je suis relativement nouveau pour regex. Pour plus d'informations, je l'utilise à R. Où j'ai une liste des chaînes similaires comme celle précédemment mentionnée et que je souhaite générer une nouvelle liste, ce qui ne contient que les deux chiffres. Utilisation de la fonction SUB () Je souhaite remplacer la chaîne correspondante et remplacez-la sans rien, donc à la fin, je n'ai que 2 chiffres.


Seulement si vous remplacez. Vous ne pouvez pas correspondre aux pièces non adjacentes d'une chaîne dans une opération de match.


Pourquoi avez-vous besoin d'une expression régulière? Cela peut être fait par de simples manipulations de chaîne, il suffit d'extraire tous les caractères sauf les deux que vous souhaitez ignorer


Comme je l'ai dit, je suis nouveau à tout cela, pouvez-vous expliquer comment vous feriez cela, avec quelle fonction? Pour l'instant, je n'ai essayé que d'utiliser Regex, je suis capable de créer ma liste souhaitée, mais en 2 étapes à l'aide de RegEx. S'il y avait un moyen de le faire en une fois, s'il vous plaît remplissez-moi. Merci d'avance.


@Yibioawang Veuillez ajouter la balise r à la question.


3 Réponses :


0
votes

On dirait que cela pourrait être mieux résolu sans regex. Si tout ce dont vous avez besoin est d'exclure les 2 derniers caractères de la chaîne, vous pouvez le faire via string.substr () code> comme ceci:

p>

let str = "ACC_OR.A5J1.01A";
console.log( str.substr(0, str.length - 3) +  str.substr(-1) );


0 commentaires

0
votes

Pour correspondre à ce qui est avant et après les 2 chiffres, vous pouvez utiliser 2 groupes de capture.

Comme il n'y a pas d'espaces (. * code> correspondra également aux espaces), vous pouvez utiliser \ S code> pour correspondre à un caractère non blancheur. P> xxx pré>

  • (\ s + \.) code> Capture Group 1, correspondez à 1 espaces caractères non blancheurs jusqu'à ce que le dernier point li>
  • \ d {2} code> correspond à 2 chiffres li>
  • (\ s) code> Capture Group 2, correspond à un char li> ul>

    Ensuite, vous pouvez utiliser les 2 groupes séparément. P>

    Regex Démo p>


    ou vous pouvez utiliser \ k code> pour correspondre aux chiffres et remplacer par une chaîne EMTPY P>

    [1] "ACC_OR.A5J1.A"
    
    • \ s + \. CODE> Match 1+ sans caractères blancheurs jusqu'à la dernière DOT LI>
    • \ k code> oublie ce qui a été assorti li>
    • \ d {2} code> correspond à 2 chiffres li>
    • (? = \ s) code> affirme ce qui est à droite est un espacement non Whitspace Char Li> ul>

      Démo Regex | R Démo P>

      Par exemple P>

      sub("\\S+\\.\\K\\d{2}(?=\\S)", "", "ACC_OR.A5J1.01A", perl=TRUE)
      


0 commentaires

0
votes

Vous devez simplement avoir besoin d'extraire les deux caractères avant le dernier caractère. Vous pouvez en savoir plus sur le substr xxx

sortie xxx


1 commentaires

Merci beaucoup, cela fait exactement ce dont j'ai besoin