Eu tenho tentado fazer com que um regex específico funcione, mas não consigo fazer o que eu preciso.
Basicamente, quero que procure o ROCKET. O regex deve corresponder ao ROCKET em maiúsculas ou minúsculas e com ou sem pontuação, mas não quando parte de outra palavra. Portanto, o regex seria acionado em qualquer um destes:
rocket
RoCKEt
hi Rocket
This is a rocket.
ROCKET's engine
mas NÃO é acionado no ROCKET quando é encontrado em algo como
Rocketeer
Sprocket
Eu tenho tentado acertar usando um gerador de regex online, mas não consigo fazer a correspondência exata.
Respostas:
Sugiro que você marque a Referência Rápida de Expressão Regular do MSDN
você deseja obter uma correspondência sem distinção entre maiúsculas e minúsculas para a palavra "foguete" cercada por caracteres não alfanuméricos. Um regex que funcionaria seria:
\W*((?i)rocket(?-i))\W*
O que ele fará é procurar zero ou mais (*) caracteres não alfanuméricos (\ W), seguidos por uma versão sem distinção entre maiúsculas e minúsculas do foguete ((? I) foguete (? - i)), seguido novamente por zero ou mais ( *) caracteres não alfanuméricos (\ W). Os parênteses extras ao redor do termo de correspondência de foguete atribuem a correspondência a um grupo separado. A palavra foguete estará, portanto, no grupo de partida 1.
ATUALIZAÇÃO 1: Matt disse no comentário que esse regex deve ser usado em python. Python tem uma sintaxe um pouco diferente. Para obter o mesmo resultado em python, use este regex e passe a
re.IGNORECASE
opção para a funçãocompile
oumatch
.\W*(rocket)\W*
No Regex101, isso pode ser simulado digitando "i" na caixa de texto ao lado da entrada do regex.
ATUALIZAÇÃO 2 Ismael mencionou que o regex não está correto, pois pode corresponder a "1rocket1". Ele postou uma solução muito melhor, a saber
(?:^|\W)rocket(?:$|\W)
fonte
\W*(rocket)\W*
fósforoslrocketl
. Deve ser(?:^|\W)(rocket)(?:$|\W)
(sem o*
e você deve verificar se ele corresponde ao início e / ou final da string).Acho que o futuro é um exagero nesse caso, e seria melhor usar limites de palavras com a
ignorecase
opção\brocket\b
Em outras palavras, em python:
fonte
Com
grep
esed
, você pode usar\<rocket\>
. Comgrep
a-i
opção fará com que ele case-insensitive ( i gnore caso):Não conheço nenhuma maneira de tornar todas as
sed
expressões regulares sem distinção entre maiúsculas e minúsculas, mas sempre há a maneira do homem das cavernas:fonte
Use a opção Pesquisar somente palavras inteiras.
No que diz respeito às pontuações, você não pode responder até conhecer o sabor / sabor.
É um tópico muito antigo, postado para alguém que possa visitar com uma necessidade posteriormente. Quem originou o segmento pode ter se mudado para outra coisa ... Não?
fonte
whole words only option
usandogrep
ouphp
? Desculpe, mas sua resposta não oferece nenhum valor agregado em comparação com outras respostas.