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

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

Я создаю регулярное выражение для фильтрации любых подстрок, начинающихся с '#' или '@'. Я пытаюсь отфильтровать твиты из них. В настоящее время оно соответствует всему, независимо от того, содержит ли строка слова, начинающиеся с '#' или '@'.

((?!\#)|(?!\@)).*

В этой строке ниже я хочу выделить все, что выделено жирным шрифтом, но не более:

Привет, Шах Рукх. Кто твой со-актер в предстоящем фильме?@iamsrk #любовьизМалайзии #спроситеSRK

Я хочу оставить пробелы между словами жирными. Как мне этого добиться? Это будет использоваться в python FYI.

решение1

Не обращайте внимания на сопоставление всего, кроме подстрок, начинающихся с '@' или '#'. Я просто сделал наоборот и использовал re.sub в python, чтобы удалить их из строки:

>>> import re
>>> text = 'Hi shah rukh. Who is your co-actor in the upcoming movie? @iamsrk #lovefrommalaysia #askSRK'
>>> text = re.sub(r'([\#\@].*?)(?=([\r\n ]|$))', '', text).strip()
>>> print text
Hi shah rukh. Who is your co-actor in the upcoming movie?

Краткое объяснение:

  1. Соответствующая группа №1 объединяет ([\#\@].*?)символы # или @ вместе с минимальным количеством следующих за ними символов (нежадный алгоритм).
  2. Положительный просмотр вперед (?=([\r\n ]|$))пытается сопоставить возврат каретки, новую строку, пробел или конец строки, не включая их в результат.

Не знаю, насколько это элегантное решение, но для меня оно работает. Попробуйте.regexr.com

Связанный контент