ruby的正则表达式问题

时间:2011-08-14 12:03:43

标签: ruby regex greedy

我有一个正则表达式来匹配文件名,如下所示:

name - subname goes here v4 03.txt
name - subname long 03.txt
name - subname v4 #03.txt

我想提取名称和子名称,没有任何附加数据。我能够很好地提取数据,给我错误的问题是v4部分(它是一个版本标记,它是av和后面的数字,它不包括在任何地方),我想要排除但它会将其与子名称一起提取......

我的正则表达式如下:

^([\w \.]+)(?:-)?([\w \.-]+)? #?\d+

我尝试过这样的事情,但它只能在“?”末尾没有(?:v\d+ )?的情况下工作,然后在没有版本的情况下无法匹配文件名:

^([\w \.]+)(?:-)?([\w \.-]+)? (?:v\d+ )?#?\d+

如何让它发挥作用?

2 个答案:

答案 0 :(得分:1)

试试这个:

/^([\w \.]+?) - ([\w \.-]+?)(?: v\d+)? #?\d+/

我认为你需要了解(\ w +?)和(\ w +)的区别是什么?

答案 1 :(得分:0)

我会分两个阶段完成,首先删除你不想要的部分

a = str.sub /\s* (?: v\d+)? \s* \d+ \.[^.]*? $/x, ''

然后将字符串拆分为' - '

a.split /\s*-\s*/