-1
votes

Python Regex: correspond aux numéros de paragraphe correspondant

Je tente de faire correspondre les numéros de paragraphe dans mon bloc de texte. Compte tenu de la phrase suivante:

Reportez-vous au paragraphe C.2.1a.5 pour des exemples. P> blockQuote>

Je voudrais correspondre au mot c.2.1a.5 code>. p>

mon code actuel comme: P>

([0-9a-zA-Z]{1,2}\.)


6 commentaires

Vous devriez fournir plus d'exemples de votre look de paragraphe. Il n'est pas possible que quiconque puisse vous aider à faire de la bonne réégalité sans en savoir plus.


Le lien de démonstration que vous avez fourni n'a rien à voir avec cette question. Veuillez fournir plus de données d'échantillonnage afin que la question puisse être répondue correctement.


Toutes mes excuses, ne réalisaient pas que j'ai copié la mauvaise URL. URL modifiée


Avez-vous d'autres exemples de numéros de paragraphe valides? Il est difficile de concevoir une regex sans cela.


Les numéros de paragraphe seront-ils toujours similaires à C.2.1A.5 au format?


Le modèle correspond es. car il se termine sur la correspondance d'un point. Vous pouvez empêcher cela en faisant correspondre la classe de caractères et répéter cela en commençant par un point. Notez que cela correspond aux plages de classe de caractères et est une correspondance large pour un numéro de paragraphe \ b [0-9a-za-z] {1,2} (?: \. [0-9A-ZA-Z] {1,2}) + \ b Regex101.com/r/3KLC6H/1


3 Réponses :


2
votes

Vous devez utiliser à la suite de regex pour correspondre aux numéros de paragraphe de votre texte. xxx pré>

Essayez cette démo p>

Voici l'explication, p>

  • \ b code> - correspond à une limite de mots, évitant ainsi la correspondance partiellement dans un gros mot comme exemples. code> li> li>
  • (?: [0-9a-za-z] {1,2} \.) + code> - Ceci correspond à un texte alphanumérique avec une longueur une ou deux comme vous avez essayé de faire correspondre votre propre regex. li>
  • [0-9a-za-z] code> - Enfin, le match se termine par un caractère alphanumérique à la fin. Si vous souhaitez que cela correspond à un ou deux caractères alphanumériques à la fin également, ajoutez simplement {1,2} code> après li>
  • \ b code> - correspond à une limite de mot à nouveau pour vous assurer qu'il ne correspond pas partiellement dans un gros mot. LI> ul>

    EDIT: strong> p>

    Comme une personne a souligné, au cas où votre texte ait des chaînes telles que aaaaaa code> ou AAA Code> ou même 1.2 code> et vous ne voulez pas correspondre à ces chaînes et que vous souhaitez uniquement faire correspondre les chaînes qui disposent exactement de trois points à l'intérieur, vous devez utiliser la suite plus précise de vos numéros de paragraphe. . P>

    ['C.2.1a.5']
    


0 commentaires

1
votes

Si une version simple est requise, vous pouvez utiliser cette facilité à comprendre et modifier regex ([az] {1} \. [0-9] {1,3} \. [0-9] {1 , 3} [AZ] {1} \. [0-9] {1,3})


0 commentaires

0
votes

Je pense que nous devrions garder l'expression de regex simple et lisible. Vous pouvez utiliser la regex xxx

explication -

  • L'expression (?: [a-za-z] +.) {3} garantit que le groupe (?: [A-ZA-Z] +.) doit être répété 3 fois dans le mot. Le groupe contient un caractère alphabétique suivi un point.
  • Le mot se terminerait par un caractère alphabétique. Production: ['C.2.1A.5']

0 commentaires