2010-01-21 31 views
14

decir que tengo una frase:Todas las Palabras, excepto uno

yo soy una buena compra y chico malo también

¿Cómo seleccionar cada palabra excepto niño en esta oración usando expresiones regulares?

+3

¿En qué idioma/ambiente? ¿Y a qué te refieres con "seleccionar cada palabra"? ¿Por separado? ¿Juntos? –

+3

Idioma? ¿Salida deseada? –

+2

usando regularexpression. – pokrate

Respuesta

33

Usted puede utilizar aspecto negativo detrás de:

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

O aspecto negativo delante desde no todos apoyan la mirada negativa detrás

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

Usted puede leer acerca aspecto negativo por delante here

+0

respuesta correcta verificada aquí http://www.gskinner.com/RegExr/ – pokrate

5

¿Qué idioma? ¿Por qué quieres usar una expresión regular?

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

-1 Esta es una respuesta tonta. – cletus

+6

tonto porque? La especificación no está clara y esta solución coincide con una de las interpretaciones. –

+2

Tenga en cuenta que el OP dijo "palabra". Esto coincidirá con parciales. Entonces, si quieres ignorar "arriba" y lo has reemplazado, también presionarás "detenido". Entonces, esta respuesta es tonta porque no reemplaza * innecesariamente * lo que no resuelve el problema, ignora el problema de los límites de palabras y simplemente presenta más problemas. – cletus

1

Sustituto niño a nada ... en Perl que sería:

s/boy //g 
+0

Mejor aún, elimine 'boy' (es decir, niño + espacio) –

+0

Muy bien, actualicé la respuesta en consecuencia ... –

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

Este fue exactamente lo que necesitaba :) –

8

Probar:

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

que significa:

  • cero anchura de palabra ruptura (\b)
  • Que ISN 'seguido por' niño ' y otro salto de palabra;
  • seguido de cualquier carácter de una manera no codiciosa;
  • Hasta otro salto de palabra.

Nota: la palabra ruptura coincide con el principio de la cadena, el final de la cadena y cualquier transición de la palabra (número, letra o subrayado) para caracteres no-palabra, o viceversa.

+0

Respuesta incorrecta, simplemente no seleccionar nada en absoluto. – pokrate

2

Si usa "boy" como divisor, obtendrá las partes restantes. Puede usarlos como teclas de selección.

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