Игнорировать слова, содержащие подстроку, используя регулярные выражения

1

Я новичок и потратил немало времени на это. Я частично смог его решить.

Проблема: я хочу, чтобы игнорировать все слова, которые имеют либо или. the The Например, atheist, others, The, the будут исключены. Тем не менее, hottie не следует включать, потому the это не происходит внутри слова как целое слово.

Я использую Python re engine.

Здесь мое регулярное выражение:

\b               - Start at word boundary
(?!              - Negative lookahead to avoid starting with the or The
   [t|T]he       - the and The
)
\w+              - Other letters are fine
(?<!             - Negative look behind
    [t|T]he      - the or The shouldn't occur before \w+
)
\b               - Word boundary

Ожидаемый результат для данного ввода:

Input: Atheist Others Their Hello the The bathe hottie tahaie theater

Expected Output: Hello hottie tahaie

Как можно видеть в regex101, я могу исключить большинство слов, кроме таких слов, как atheist --т.е. случаи, когда the or The Я" появляются внутри слов. Я искал это на SO и нашел некоторые потоки, такие как Как исключить определенную строку с помощью regex в Python? , но они, похоже, не имеют прямого отношения к тому, что я пытаюсь сделать.

Любая помощь будет оценена.


Обратите внимание, что я заинтересован в решении этой проблемы только с помощью регулярного выражения. Я не ищу решения, использующие манипуляции с строкой python.

  • 0
    \ w * [t | T] он \ w * будет работать
  • 2
    Вам не нужно | в [t|T]
Теги:
python-3.x

1 ответ

3
Лучший ответ

Этот подход проще, чем исходное регулярное выражение:

\b(?!\w*[t|T]he)\w+\b

Мы подбираем слова, но убедитесь, что нет в слове, используя "мягкий" негативный предпросмотр. the Ваш оригинальный подход запрещен только в передней или задней части слова, как это позволило без заполнения после/до границы слова. the

(?![tT]he) только текущей позиции, а (?:\w*[tT]he) позволяет совпадению перейти от текущей позиции, так как \w* может использоваться как наполнитель.

  • 0
    Благодарю. Вы не возражаете объяснить это немного? Мне трудно понять твою логику. В частности, почему у вас негативное отношение к \w* с tThe ? Я не получил эту часть. Кроме того, почему слова, оканчивающиеся the (например, ванна), игнорируются?
  • 0
    Я использую \ w *, чтобы позволить механизму RE просматривать произвольное количество символов в слове. Таким образом, он проверяет все слово для , и если он находит его, он не весь матч. the
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню