我有许多可能的标题模式,我想用Ruby regexp捕获它。
如何将其置于一个正则表达式模式中?
此方法仅处理第二种情况:
def self.format_title(title)
title.match(/(?:.+)\|(.+)/).to_a.first.strip
end
答案 0 :(得分:1)
试试这个正则表达式:
/^(?:[^|]*\||[^\/]*\/|\[[^\]]*\])?(.+)/
可选的非捕获组(?:[^|]*\||[^\/]*\/|\[[^\]]*\])
由每种情况的模式组成:
[^|]*\|
匹配第一个|
的所有内容,[^\/]*\/
匹配第一个/
以及\[[^\]]*\]
会匹配[
与字符串开头的第一个]
之间的所有内容答案 1 :(得分:1)
您的代码可以重写为:title[/\|(.+)/),1].strip
对于所有四种情况,我建议使用gsub
:
def format_title title
title.gsub(/.+[\|\/]/,'').gsub(/^\[.+\]/,'').strip
end