我有一个正则表达式,可以在我的驱动器上找到电视剧文件
if (filename =~ /S\d+?E\d+?/ix)
puts "EPISODE : #{filename}"
运行良好并打印文件名,例如
EPISODE : Lie.to.Me.S02E02.Truth.or.Consequences.HDTV.XviD-2HD.avi
如何在匹配前显示所有内容,而不是整个文件名? 所以我想在S02E02上匹配但是显示Lie.to.Me,但是这个Lie.to.Me字符串可以真的是任何东西,所以我不能为特定的东西做正则表达式。
答案 0 :(得分:3)
s = "Lie.to.Me.S02E02.Truth.or.Consequences.HDTV.XviD-2HD.avi"
m = s.match(/S\d+?E\d+?/ix)
puts m.pre_match
=> "Lie.to.Me."
答案 1 :(得分:1)
尝试使用$`
特殊变量:
def check(filename)
if (filename =~ /S\d+?E\d+?/ix)
puts "MATCH: #{filename}"
puts "PRE: #{$`}"
end
end
check 'EPISODE : Lie.to.Me.S02E02.Truth.or.Consequences.HDTV.XviD-2HD.avi'
# MATCH: EPISODE : Lie.to.Me.S02E02.Truth.or.Consequences.HDTV.XviD-2HD.avi
# PRE: EPISODE : Lie.to.Me.
答案 2 :(得分:0)
在模式前使用#match
与.*
一起使用捕获组。
"Lie.To.Me-S02E01-Xvid.avi".match(/\A(.*?)S\d+E\d+?/ix)[1]
# => Lie.To.Me-
答案 3 :(得分:0)
使用pre_match:
match = /S\d+?E\d+?/ix.match(filename)
if match then
puts match.pre_match
end
答案 4 :(得分:0)
你应该在正则表达式中使用圆括号来处理组: if(filename =〜/ .+(S\d+?E\d+?).*/ix) 把“EPISODE:\ 1” 这意味着只会显示匹配的第一个组。