Я пытался заставить работать конкретное регулярное выражение, но не могу заставить его делать то, что мне нужно.
В принципе, я хочу, чтобы он искал ROCKET. Регулярное выражение должно соответствовать ROCKET в верхнем или нижнем регистре, с или без знаков препинания, но не когда является частью другого слова. Итак, регулярное выражение сработает на любом из них:
rocket
RoCKEt
hi Rocket
This is a rocket.
ROCKET's engine
но НЕ срабатывает на ROCKET, когда он найден в чем-то вроде
Rocketeer
Sprocket
Я пытался сделать это правильно, используя генератор регулярных выражений онлайн, но я не могу заставить его точно соответствовать.
Ответы:
Я предлагаю сделать закладку Краткий справочник по регулярным выражениям MSDN
Вы хотите добиться нечувствительного к регистру соответствия для слова «ракета», окруженного не алфавитно-цифровыми символами. Регулярное выражение, которое будет работать:
\W*((?i)rocket(?-i))\W*
Что он будет делать, так это искать ноль или более (*) не буквенно-цифровых (\ W) символов, за которыми следует нечувствительная к регистру версия ракеты ((? I) rocket (? - i)), за которой снова следует ноль или более ( *) не буквенно-цифровые символы (\ W). Дополнительные круглые скобки вокруг термина совпадения ракет назначают совпадение для отдельной группы. Таким образом, слово «ракета» будет в группе совпадений 1.
ОБНОВЛЕНИЕ 1: Мэтт сказал в комментарии, что это регулярное выражение должно использоваться в Python. Python имеет немного другой синтаксис. Чтобы достичь того же результата в Python, используйте это регулярное выражение и передайте
re.IGNORECASE
опцию функцииcompile
илиmatch
.\W*(rocket)\W*
На Regex101 это можно смоделировать, введя «i» в текстовое поле рядом с вводом regex.
ОБНОВЛЕНИЕ 2 Исмаэль упомянул, что регулярное выражение не совсем корректно, так как оно может соответствовать «1rocket1». Он опубликовал гораздо лучшее решение, а именно
(?:^|\W)rocket(?:$|\W)
источник
\W*(rocket)\W*
спичкиlrocketl
. Это должно быть(?:^|\W)(rocket)(?:$|\W)
(без,*
и вы должны проверить, соответствует ли он началу и / или концу строки).Я думаю, что в этом случае заблаговременность слишком велика, и вам лучше использовать границы слов с
ignorecase
опцией:\brocket\b
Другими словами, в питоне:
источник
С
grep
иsed
вы можете использовать\<rocket\>
. Сgrep
, то-i
опция сделает это независимо от регистра ( я Пропускать случай):Я не знаю способа сделать все
sed
регулярные выражения нечувствительными к регистру, но всегда есть путь пещерного человека:источник
Используйте параметр «Искать только целые слова».
Что касается знаков препинания, вы не можете ответить на них, пока не узнаете вкус / аромат.
Это очень старая тема, поэтому опубликована для тех, кто может посетить позже. Те, кто создал поток, могли перейти к чему-то другому ... Нет?
источник
whole words only option
используетgrep
илиphp
? Извините, но ваш ответ не дает никакой дополнительной пользы по сравнению с другими ответами.