He estado intentando que funcione una expresión regular específica, pero no logro 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, y con o sin puntuación, pero no cuando forma parte de otra palabra. Entonces, la expresión regular se activaría en cualquiera de estos:
rocket
RoCKEt
hi Rocket
This is a rocket.
ROCKET's engine
pero NO se activa en ROCKET cuando se encuentra en algo como
Rocketeer
Sprocket
He estado intentando hacerlo bien usando un generador de expresiones regulares en línea, pero no puedo lograr que coincida exactamente.
Respuesta1
Sugiero marcar elReferencia rápida de expresiones regulares de MSDN
desea lograr una coincidencia que no distinga 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 que no distingue entre mayúsculas y minúsculas de rocket ( (?i)rocket(?-i) ), seguido nuevamente de 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 1 del partido.
ACTUALIZACIÓN 1:
Matt dijo en el comentario que esta expresión regular se usará 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ón compile
o match
.
\W*(rocket)\W*
Enexpresión regular101esto se puede simular ingresando "i" en el cuadro de texto al lado de la entrada de expresión regular.
ACTUALIZACIÓN 2Ismael 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)
Respuesta2
Creo que las anticipaciones son excesivas en este caso, y sería mejor usar límites de palabras con la ignorecase
opción,
\brocket\b
En otras palabras, en Python:
>>> x="rocket's"
>>> y="rocket1."
>>> c=re.compile(r"\brocket\b",re.I) # with the ignorecase option
>>> c.findall(y)
[]
>>> c.findall(x)
['rocket']
Respuesta3
Con grep
y sed
, puedes usar \<rocket\>
. Con grep
, la -i
opción hará que no se distinga entre mayúsculas y minúsculas (iignorar caso):
grep -i '\<rocket\>'
No conozco ninguna forma de hacer que todas sed
las expresiones regulares no distingan entre mayúsculas y minúsculas, pero siempre existe la forma del cavernícola:
sed -n '/\<[Rr][Oo][Cc][Kk][Ee][Tt]\>/p'
Respuesta4
Creo que puedes usar algo como esto para especificar la palabra que deseas:
/^(rocket|RoCKEt)$/g