J'ai essayé de faire fonctionner une expression rationnelle spécifique mais je n'arrive pas à faire ce dont j'ai besoin.
Fondamentalement, je veux qu'il cherche ROCKET. L'expression régulière doit correspondre à ROCKET en majuscules ou en minuscules, avec ou sans ponctuation, mais pas lorsqu'elle fait partie d'un autre mot. Ainsi, l'expression régulière se déclencherait sur l'un de ces éléments:
rocket
RoCKEt
hi Rocket
This is a rocket.
ROCKET's engine
mais PAS déclencher sur ROCKET quand il se trouve dans quelque chose comme
Rocketeer
Sprocket
J'ai essayé de faire les choses correctement en utilisant un générateur de regex en ligne, mais je ne peux pas le faire correspondre exactement.
Réponses:
Je suggère de mettre en signet le MSDN Regular Expression Quick Reference
vous souhaitez obtenir une correspondance insensible à la casse pour le mot "fusée" entouré de caractères non alphanumériques. Une expression rationnelle qui fonctionnerait serait:
\W*((?i)rocket(?-i))\W*
Ce qu'il fera, c'est rechercher zéro ou plusieurs (*) caractères non alphanumériques (\ W), suivis d'une version non sensible à la casse de la fusée ((? I) fusée (? - i)), suivie à nouveau par zéro ou plus ( *) caractères non alphanumériques (\ W). Les parenthèses supplémentaires autour du terme de correspondance de fusée attribuent la correspondance à un groupe distinct. Le mot fusée sera donc dans le groupe de matches 1.
MISE À JOUR 1: Matt a déclaré dans le commentaire que cette expression régulière devait être utilisée en python. Python a une syntaxe légèrement différente. Pour obtenir le même résultat en python, utilisez cette expression régulière et passez l'
re.IGNORECASE
option à la fonctioncompile
ormatch
.\W*(rocket)\W*
Sur Regex101, cela peut être simulé en entrant "i" dans la zone de texte à côté de l'entrée regex.
MISE À JOUR 2 Ismael a mentionné que l'expression régulière n'est pas tout à fait correcte, car elle pourrait correspondre à "1rocket1". Il a affiché une bien meilleure solution, à savoir
(?:^|\W)rocket(?:$|\W)
la source
\W*(rocket)\W*
allumetteslrocketl
. Il devrait l'être(?:^|\W)(rocket)(?:$|\W)
(sans le*
et vous devez vérifier s'il correspond au début et / ou à la fin de la chaîne).Je pense que les perspectives sont exagérées dans ce cas, et vous feriez mieux d'utiliser les limites de mots avec l'
ignorecase
option,\brocket\b
En d'autres termes, en python:
la source
Avec
grep
etsed
, vous pouvez utiliser\<rocket\>
. Avecgrep
, l'-i
option la rendra insensible à la casse ( je ne sais pas la casse):Je ne connais aucun moyen de rendre tous les
sed
regex insensibles à la casse, mais il y a toujours la façon de l'homme des cavernes:la source
Utilisez l'option Rechercher uniquement les mots entiers.
En ce qui concerne les ponctuations, vous ne pouvez pas y répondre avant de connaître la saveur / la saveur.
C'est un fil très ancien, donc publié pour quelqu'un qui pourrait visiter avec un besoin plus tard. Ceux qui sont à l'origine du fil peuvent être passés à autre chose ... Non?
la source
whole words only option
utilisegrep
ouphp
? Désolé, mais votre réponse ne donne aucune valeur ajoutée par rapport aux autres réponses.