2010-01-21 5 views
14

Dire que j'ai une phrase:tous les mots correspondants sauf un

Je suis un bon achat et bad boy trop

Comment sélectionner chaque mot, sauf garçon dans cette phrase en utilisant l'expression régulière?

+3

Dans quelle langue/environnement? Et que voulez-vous dire par "sélectionner chaque mot"? Séparément? Ensemble? –

+3

Langue? Sortie désirée? –

+2

en utilisant une expression de régulation. – pokrate

Répondre

33

Vous pouvez utiliser regard négatif derrière:

\w+\b(?<!\bboy) 

Ou regard négatif avant depuis pas tout le soutien négatif regarder derrière

(?!boy\b)\b\w+ 

Vous pouvez lire regard négatif avant here

+0

bonne réponse vérifiée ici http://www.gskinner.com/RegExr/ – pokrate

5

Quelle langue? Pourquoi voulez-vous utiliser une regex?

answer = yourString.Replace("boy", ""); 
+0

-1 Ceci est une réponse stupide. – cletus

+6

Idiot parce que? La spécification n'est pas claire et cette solution correspond à l'une des interprétations. –

+2

Notez l'OP dit "mot". Cela correspondra aux partiels. Donc, si vous vouliez ignorer "top" et que vous l'avez fait remplacer, vous devriez aussi cliquer sur "stop". Cette réponse est donc bête parce que ce n'est pas un remplacement * inutile * qui ne résout pas le problème, ignore le problème des limites de mots et introduit simplement plus de problèmes. – cletus

1

Remplaçant garçon à rien ... en Perl qui serait:

s/boy //g 
+0

Encore mieux, enlever 'boy' (ie garçon + espace) –

+0

Tout à fait raison, j'ai mis à jour la réponse en conséquence ... –

3
/\b(?!boy)\S+/g 
+0

Celui-ci était exactement ce dont j'avais besoin :) –

8

Essayez:

\b(?!boy\b).*?\b 

qui signifie:

  • Zéro rupture mot largeur (\b)
  • Ce ISN 't suivi par "garçon" et un autre mot pause;
  • suivi de tous les caractères d'une manière non-gourmande;
  • Jusqu'à un autre mot de rupture.

Note: la pause mot correspond au début de la chaîne, la fin de la chaîne et une transition de mot (numéro, lettre ou underscore) à caractère non-mot ou vice versa.

+0

Mauvaise réponse, ne sélectionnant rien du tout. – pokrate

2

Si vous utilisez "garçon" comme séparateur, vous obtiendrez les pièces restantes. Vous pouvez les utiliser comme touches de sélection.

>>> re.split("boy","I am a good buy and bad boy too") 
['I am a good buy and bad ', ' too'] 
Questions connexes