Ruby regexp:复杂模式

时间:2011-01-23 11:22:48

标签: ruby regex

我有许多可能的标题模式,我想用Ruby regexp捕获它。

  1. 只是标题
  2. 忽略|捕获的标题
  3. 忽略/要捕获的标题
  4. [忽略]捕获的标题
  5. 如何将其置于一个正则表达式模式中?

    此方法仅处理第二种情况:

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

2 个答案:

答案 0 :(得分:1)

试试这个正则表达式:

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

可选的非捕获组(?:[^|]*\||[^\/]*\/|\[[^\]]*\])由每种情况的模式组成:

  • [^|]*\| 匹配第一个|的所有内容,
  • [^\/]*\/ 匹配第一个/以及
  • 之前的所有内容
  • \[[^\]]*\] 会匹配[与字符串开头的第一个]之间的所有内容

答案 1 :(得分:1)

您的代码可以重写为:title[/\|(.+)/),1].strip

对于所有四种情况,我建议使用gsub

def format_title title
    title.gsub(/.+[\|\/]/,'').gsub(/^\[.+\]/,'').strip
end