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

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

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

Привет, шах, Рух. Кто ваш соавтор в предстоящем фильме? @iamsrk #lovefrommalaysia #askSRK

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

1 ответ1

0

Не берите в голову совпадение всего, кроме подстрок, начинающихся с '@' или '#'. Я просто сделал противоположное и использовал 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .