Expresión regular para que coincida con la cadena que comienza con "detener"

97

¿Cómo creo una expresión regular para que coincida con una palabra al principio de una cadena? Buscamos coincidir stopal principio de una cadena y cualquier cosa puede seguirla.

Por ejemplo, la expresión debe coincidir:

stop
stop random
stopping

Gracias.

Brad Mace
fuente

Respuestas:

184

Si desea hacer coincidir solo las líneas que comienzan con, deje de usar

^stop

Si desea hacer coincidir las líneas que comienzan con la palabra parada seguida de un espacio

^stop\s

O, si desea hacer coincidir las líneas que comienzan con la palabra stop pero seguidas por un espacio o cualquier otro carácter que no sea una palabra que pueda usar (su estilo de expresión regular lo permite)

^stop\W

Por otro lado, lo que sigue coincide con una palabra al principio de una cadena en la mayoría de los sabores de expresiones regulares (en estos sabores, \ w coincide con lo contrario de \ W)

^\w

Si su sabor no tiene el atajo \ w, puede usar

^[a-zA-Z0-9]+

Tenga cuidado de que este segundo modismo solo coincidirá con letras y números, sin símbolo alguno.

Consulte su manual de sabor de expresiones regulares para saber qué accesos directos están permitidos y qué coinciden exactamente (y cómo tratan con Unicode).

Vinko Vrsalovic
fuente
27
+1 para generalizar tu respuesta. Me encantaría ver más de esto en Stack Overflow. Lo convierte en un mejor recurso de aprendizaje en mi opinión.
Jim
¿Cómo hacer que no distinga entre mayúsculas y minúsculas, es decir, que coincida con Stop o stop o sTop?
Elton García de Santana
Depende de su idioma ... Compatible con Perl puede usar el modificador I. / regex / i .NET RegexOptions.IgnoreCase y así sucesivamente
Vinko Vrsalovic
No lo olvides ^stop\b, lo que permitiría cualquier límite, incluido el final de la línea
Mad Physicist
80

Prueba esto:

/^stop.*$/

Explicación:

  • / charachters delimitan la expresión regular (es decir, no son parte de Regex per se)
  • ^ significa coincidir al principio de la línea
  • . seguido de * significa coincidir con cualquier carácter (.), cualquier número de veces (*)
  • $ significa hasta el final de la línea

Si desea hacer cumplir esa parada seguida de un espacio en blanco, puede modificar la expresión regular de la siguiente manera:

/^stop\s+.*$/
  • \ s significa cualquier carácter de espacio en blanco
  • + después de \ s significa que debe haber al menos un carácter de espacio en blanco después de la palabra de parada

Nota: también tenga en cuenta que la expresión regular anterior requiere que la palabra de detención esté seguida de un espacio. Entonces no coincidiría con una línea que solo contiene: stop

Mike Dinescu
fuente
No todos los idiomas usan barras de avance para delimitar las expresiones regulares.
JAB
1
@Cat Megex: Por eso precisamente agregué la explicación. Si su idioma usa algo más para delimitar la expresión regular, reemplace / con el carácter adecuado
Mike Dinescu
1
@Mez sí, y tal redundancia aumenta la claridad y el rendimiento rexegg.com/regex-optimizations.html#anchors
MarredCheese
28

Si desea hacer coincidir cualquier cosa después de una palabra, deténgase y no solo al comienzo de la línea, puede usar: \bstop.*\b- palabra seguida de línea

Palabra hasta el final de la cadena

O si desea hacer coincidir la palabra en el uso de cadena \bstop[a-zA-Z]*- sólo las palabras que comienzan con la parada

Solo las palabras que comienzan con detener

O el comienzo de las líneas con parada solo ^stop[a-zA-Z]*para la palabra - solo la primera palabra
Toda la línea ^stop.*- primera línea de la cadena

Y si desea hacer coincidir todas las cadenas que comienzan con parada, incluidas las nuevas líneas, use: /^stop.*/s- cadena de varias líneas que comienza con parada

Waxo
fuente
19

Como dijo @SharadHolani. Esto no coincidirá con todas las palabras que comiencen con " detener "

. Solo si está al principio de una línea como " deja de ir ". @Waxo dio la respuesta correcta:

Éste es un poco mejor, si desea hacer coincidir cualquier palabra que comienza con " parada " y que contiene nada más que las letras de la A a la Z .

\bstop[a-zA-Z]*\b

Esto coincidiría con todos

detener (1)

detener azar (2)

parada (3)

quiero parar (4)

por favor para (5)

Pero

/^stop[a-zA-Z]*/

solo coincidiría con (1) hasta (3), pero no (4) y (5)

Sedat Kilinc
fuente
8
/stop([a-zA-Z])+/

Coincidirá con cualquier palabra de parada (parada, parada, parada, etc.)

Sin embargo, si solo desea hacer coincidir "detener" al comienzo de una cadena

/^stop/

hará: D

Mez
fuente
2
Esto coincidirá con "no dejes de ir"
Alex B
1
Esto no coincidirá con stop123 o stop.
lostintranslation
7

Si desea hacer coincidir cualquier cosa que comience con "detener", incluidos "dejar de ir", "detener" y "detener" utilice:

^stop

Si desea hacer coincidir la palabra detener seguida de cualquier cosa como en "dejar de ir", "detener esto", pero no "detener" y no "detener", use:

^stop\W
Alex B
fuente
0

Aconsejaría contra un enfoque de expresión regular simple para este problema. Hay demasiadas palabras que son subcadenas de otras palabras no relacionadas, y probablemente se volverá loco tratando de adaptar las soluciones más simples ya proporcionadas.

Querrá al menos un algoritmo de derivación ingenuo (pruebe la derivación de Porter; hay código gratuito disponible en la mayoría de los idiomas) para procesar el texto primero. Mantenga este texto procesado y el texto preprocesado en dos matrices separadas de espacio dividido. Asegúrese de que cada carácter no alfabético también tenga su propio índice en esta matriz. Cualquiera que sea la lista de palabras que esté filtrando, elimínelas también.

El siguiente paso sería encontrar los índices de matriz que coincidan con su lista de palabras derivadas 'stop'. Elimínelos de la matriz sin procesar y luego vuelva a unirlos en los espacios.

Esto es solo un poco más complicado, pero será un enfoque mucho más confiable. Si tiene alguna duda sobre el valor de un enfoque más orientado a la PNL, es posible que desee investigar un poco los errores de clbuttic .

Robert Elwell
fuente
0

Si desea que la palabra comience con "detener", puede utilizar el siguiente patrón. "^ detente. *"

Esto coincidirá con las palabras que comienzan con parada seguida de cualquier cosa.

Manisha Chaurasia
fuente
1
¿No podrías simplemente usar "^stop"?
Stephen Rauch
Depende. Mientras hablamos en términos de sintaxis java, podemos usar el objeto Pattern y Matcher para usar expresiones regulares o el método .matches () de uso directo con el objeto String. Se diferencian en el resultado de la siguiente manera: code String line = "stopped"; String pattern = "^stop"; Pattern r = Pattern.compile(pattern); Matcher m = r.matcher(line); System.out.println(m.find( )); //prints true System.out.println(line.matches(pattern)); //prints false
Manisha Chaurasia
1
Esto coincide solo si la palabra al principio de la línea. Si las palabras que comienzan con "detener" están en el medio de la línea o al final, esta expresión regular no coincidirá. @StephenRauch si omite [az] * no obtendrá palabras como "detener" en su totalidad. En el caso de "detener" obtendrá "detener" y "ping" faltaría.
Sedat Kilinc