0

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

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+

我如何使它工作?

4

2 回答 2

1

试试这个:

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

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

于 2011-08-14T13:59:29.867 回答
0

我会分两个阶段执行此操作,首先删除您不想要的部分

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

然后在' - '上拆分字符串

a.split /\s*-\s*/
于 2011-08-14T12:24:26.337 回答