He estado tratando de hacer que una expresión regular específica funcione, pero no puedo hacer que haga lo que necesito.
Básicamente, quiero que busque ROCKET. La expresión regular debe coincidir con ROCKET en mayúsculas o minúsculas, con o sin puntuación, pero no cuando forma parte de otra palabra. Entonces, la expresión regular se dispararía en cualquiera de estos:
rocket
RoCKEt
hi Rocket
This is a rocket.
ROCKET's engine
pero NO se dispara en ROCKET cuando se encuentra en algo como
Rocketeer
Sprocket
He estado tratando de hacerlo bien usando un generador de expresiones regulares en línea, pero no puedo hacer que coincida exactamente.
Respuestas:
Sugiero marcar la referencia rápida de expresión regular de MSDN
desea lograr una coincidencia entre mayúsculas y minúsculas para la palabra "cohete" rodeada de caracteres no alfanuméricos. Una expresión regular que funcionaría sería:
\W*((?i)rocket(?-i))\W*
Lo que hará es buscar cero o más (*) caracteres no alfanuméricos (\ W), seguidos de una versión de cohete que no distinga entre mayúsculas y minúsculas ((? I) rocket (? - i)), seguido de nuevo por cero o más ( *) caracteres no alfanuméricos (\ W). Los paréntesis adicionales alrededor del término de coincidencia de cohetes asignan la coincidencia a un grupo separado. La palabra cohete estará así en el grupo de partido 1.
ACTUALIZACIÓN 1: Matt dijo en el comentario que esta expresión regular se utilizará en Python. Python tiene una sintaxis ligeramente diferente. Para lograr el mismo resultado en python, use esta expresión regular y pase la
re.IGNORECASE
opción a la funcióncompile
omatch
.\W*(rocket)\W*
En Regex101 esto se puede simular ingresando "i" en el cuadro de texto junto a la entrada de expresiones regulares.
ACTUALIZACIÓN 2 Ismael ha mencionado que la expresión regular no es del todo correcta, ya que podría coincidir con "1rocket1". Publicó una solución mucho mejor, a saber
(?:^|\W)rocket(?:$|\W)
fuente
\W*(rocket)\W*
fósforoslrocketl
. Debería ser(?:^|\W)(rocket)(?:$|\W)
(sin el*
y debe verificar si coincide con el inicio y / o el final de la cadena).Creo que los look-aheads son excesivos en este caso, y sería mejor usar límites de palabras con la
ignorecase
opción,\brocket\b
En otras palabras, en python:
fuente
Con
grep
ysed
, puedes usar\<rocket\>
. Congrep
la-i
opción hará que sea más sensible a las mayúsculas ( i gnore caso):No conozco ninguna forma de hacer que todas las
sed
expresiones regulares no distingan entre mayúsculas y minúsculas, pero siempre existe la forma del hombre de las cavernas:fuente
Use la opción Buscar solo palabras completas.
En cuanto a los signos de puntuación, no puede responder hasta que sepa el sabor / sabor.
Es un hilo muy antiguo, publicado para alguien que podría visitar con una necesidad, más adelante. Los que originaron el hilo podrían haberse mudado a otra cosa ... ¿No?
fuente
whole words only option
usandogrep
ophp
? Lo sentimos, pero su respuesta no ofrece ningún valor agregado en comparación con otras respuestas.