Ruby регулярное выражение: сложный шаблон - PullRequest
2 голосов
/ 23 января 2011

У меня есть несколько возможных шаблонов для заголовка, которые я хочу захватить с помощью регулярного выражения Ruby.

  1. Просто заголовок
  2. Игнорировать |Заголовок для захвата
  3. Игнорировать / Заголовок для захвата
  4. [Игнорировать] Заголовок для захвата

Как поместить это в один шаблон регулярного выражения?

Этот метод работает только со вторым случаем:

  def self.format_title(title)
    title.match(/(?:.+)\|(.+)/).to_a.first.strip
  end

Ответы [ 2 ]

1 голос
/ 23 января 2011

Ваш код можно переписать в: title[/\|(.+)/),1].strip

И для всех четырех случаев я рекомендую использовать gsub:

def format_title title
    title.gsub(/.+[\|\/]/,'').gsub(/^\[.+\]/,'').strip
end
1 голос
/ 23 января 2011

Попробуйте это регулярное выражение:

/^(?:[^|]*\||[^\/]*\/|\[[^\]]*\])?(.+)/

Необязательная группа без записи (?:[^|]*\||[^\/]*\/|\[[^\]]*\]) состоит из шаблона для каждого случая:

  • [^|]*\| соответствует всему до первого |,
  • [^\/]*\/ соответствует всему до первого /, и
  • \[[^\]]*\] соответствует всему между [ и первым следующим ] в начале строки
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...