153 votes

Différence entre \b y \B dans les expressions rationnelles

Je suis en train de lire un livre sur les expressions régulières et je suis tombé sur cet exemple de \b :

Le chat a éparpillé sa nourriture dans toute la pièce.

Utilisation des expressions rationnelles - \bcat\b correspondra au mot cat mais pas le cat en scattered .

Para \B l'auteur utilise l'exemple suivant :

Veuillez saisir l'identifiant à neuf chiffres tel qu'il est.

apparaît sur votre code couleur.

Utilisation des expressions rationnelles \B-\B correspondances - entre le mot color - coded . En utilisant \b-\b d'autre part, correspond à la - en nine-digit y pass-key .

Comment se fait-il que dans le premier exemple, nous utilisions \b séparer cat et dans la deuxième utilisation \B séparer - ? Utilisation \b dans le deuxième exemple fait le contraire de ce qu'il a fait précédemment.

Veuillez m'expliquer la différence.

EDIT : Aussi, quelqu'un peut-il expliquer avec un nouvel exemple ?

4voto

Kavyajeet Bora Points 473

\b est utilisé comme limite de mot

word = "categorical cat"

Trouver tous les "cat" dans le mot ci-dessus

sans \b

re.findall(r'cat',word)
['cat', 'cat']

avec \b

re.findall(r'\bcat\b',word)
['cat']

3voto

Matt Ball Points 165937

\b correspond à une frontière de mots. \B correspond à des limites de non-mots, et est équivalent à [^\b](?!\b) <sup>(merci à <a href="https://stackoverflow.com/users/20938/alan-moore">@Alan Moore </a>pour la correction) </sup> . Les deux sont largeur nulle.

Voir http://www.regular-expressions.info/wordboundaries.html pour plus de détails. Ce site est extrêmement utile pour de nombreuses questions de base sur les expressions rationnelles.

3voto

Kartik Patodi Points 19

Prenons une chaîne de caractères comme :

XIX IXI XX X I II IIXX XXII I-I X-X -X X- X-I I-X -X- -I-X -X-I I-X- X-I- X_X _X-

Remarque : Le trait de soulignement ( _ ) n'est pas considéré comme un caractère spécial dans ce cas.

  1. /\bX\b/g Doit commencer et se terminer par un caractère spécial ou un espace blanc.

XIX IXI XX X I II IIXX XXII I-I X - X - X X - X -I I- X - X - -I- X - X -I I- X - X -I- X_X _X-


  1. /\bX/g Doit commencer par un caractère spécial ou un espace blanc

X IX IXI X X X I II IIXX X XII I-I X - X - X X - X -I I- X - X - -I- X - X -I I- X - X -I- X _X _X-


  1. /X\b/g Doit se terminer par un caractère spécial ou un espace blanc

XI X IXI X X X I II IIX X XXII I-I X - X - X X - X -I I- X - X - -I- X - X -I I- X - X -I- X_ X _ X -


  1. /\BX\B/g
    Doit no commencer et no se termine par un caractère spécial ou un espace blanc

XIX I X I XX X I II II X X X X II I-I X-X -X X- X-I I-X -X- -I-X -X-I I-X- X-I- X_X _X-


  1. /\BX/g Doit no commencent par un caractère spécial ou un espace blanc

XI X I X I X X X I II II XX X X II I-I X-X -X X- X-I I-X -X- -I-X -X-I I-X- X-I- X_ X _ X -


  1. /X\B/g Doit no se termine par un caractère spécial ou un espace blanc

X IX I X I X X X I II II X X XX II I-I X-X -X X- X-I I-X -X- -I-X -X-I I-X- X-I- X _X _X-


  1. /\bX\B/g Devrait commencer et no se termine par un caractère spécial ou un espace blanc

X IX IXI X X X I II II X X X XII I-I X-X -X X- X-I I-X -X- -I-X -X-I I-X- X-I- X _X _X-


  1. /\BX\b/g Doit no commencent et se terminent par un caractère spécial ou un espace blanc

XI X IXI X X X I II IIX X XXII I-I X-X -X X- X-I I-X -X- -I-X -X-I I-X- X-I- X_ X _ X -

2voto

tryptoWphan Points 21

Comme indiqué dans https://www.regular-expressions.info/wordboundaries.html :

Il y a trois positions différentes qui peuvent être considérées comme des limites de mots pour \b :

  1. Avant le premier caractère de la chaîne, si le premier caractère est un mot \w .
  2. Après le dernier caractère de la chaîne, si le dernier caractère est un mot \w .
  3. Entre deux caractères de la chaîne, dont l'un est un mot \w et l'autre n'est pas un mot de caractère \W .

Pour mieux comprendre \b J'aimerais considérer la corde en y inscrivant le mot "limites" à l'aide de flèches.

Cliquez sur ce lien pour obtenir la visualisation du tableau de la chaîne de caractères "LE CHAT CHATÉ".

Cliquez sur ce lien pour obtenir la visualisation du tableau de la chaîne - 'THE NINE-DIGIT COLOR - CODED PASS-KEY'.

Dans la chaîne THE CAT SCATTERED

  • Le mot frontière à index 0 est attribué en suivant la procédure condition 1 mentionnés ci-dessus.

  • Le mot frontière à index 16 est attribué en suivant la procédure condition 2 .

  • Les limites du mot à indices 2, 4, 6 and 8 sont attribués en suivant la procédure condition 3 .

Dans la chaîne THE NINE-DIGIT COLOR - CODED PASS-KEY

  • Le mot frontière à index 0 est attribuée en suivant condition 1 .

  • Toutes les autres limites de mots sont attribuées en suivant la procédure suivante condition 3 . Notez ici que, puisque la chaîne se termine par un ' . (qui n'est pas un caractère de mot) \w ), le condition 2 n'est pas appliquée.

Une visualisation similaire du tableau peut être effectuée pour les frontières non-motaires \B en utilisant la condition suivante :

(Crédits : Vérifier @Ganesh M S's réponse à la même question)

\B correspond à toutes les positions où \b ne correspond pas, c'est-à-dire que

  1. Lorsqu'aucune des deux parties n'est un caractère verbal (c'est-à-dire lorsque les deux parties sont des \W ), par exemple à n'importe quelle position dans la chaîne $=(@-%++) (y compris le début et la fin de la chaîne)
  2. Quand les deux parties sont un mot de caractère \w par exemple entre le H et le i dans Hi !

0voto

Neel Basu Points 4371

\B es no \b par exemple négatif \b

pass-key il n'y a pas de limite de mot à côté - pour qu'il corresponde à \B Dans votre premier exemple, il y a des mots délimités à côté de chat, donc il y a correspondance. \b

des règles similaires s'appliquent également aux autres. \W est négatif de \w \UPPER CASE est négatif de \LOWER CASE

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X