
Я создаю регулярное выражение для фильтрации любых подстрок, начинающихся с '#' или '@'. Я пытаюсь отфильтровать твиты из них. В настоящее время оно соответствует всему, независимо от того, содержит ли строка слова, начинающиеся с '#' или '@'.
((?!\#)|(?!\@)).*
В этой строке ниже я хочу выделить все, что выделено жирным шрифтом, но не более:
Привет, Шах Рукх. Кто твой со-актер в предстоящем фильме?@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 объединяет
([\#\@].*?)
символы # или @ вместе с минимальным количеством следующих за ними символов (нежадный алгоритм). - Положительный просмотр вперед
(?=([\r\n ]|$))
пытается сопоставить возврат каретки, новую строку, пробел или конец строки, не включая их в результат.
Не знаю, насколько это элегантное решение, но для меня оно работает. Попробуйте.regexr.com