我有一个正则表达式来匹配文件名,如下所示:
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+
如何让它发挥作用?
答案 0 :(得分:1)
试试这个:
/^([\w \.]+?) - ([\w \.-]+?)(?: v\d+)? #?\d+/
我认为你需要了解(\ w +?)和(\ w +)的区别是什么?
答案 1 :(得分:0)
我会分两个阶段完成,首先删除你不想要的部分
a = str.sub /\s* (?: v\d+)? \s* \d+ \.[^.]*? $/x, ''
然后将字符串拆分为' - '
a.split /\s*-\s*/