Проблема с регулярным выражением в ruby - PullRequest
0 голосов
/ 14 августа 2011

У меня есть регулярное выражение для сопоставления имен файлов, которые выглядят следующим образом:

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 ]

1 голос
/ 14 августа 2011

попробуйте это:

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

Я думаю, вам нужно понять, в чем разница (\ w +?) И (\ w +)?

0 голосов
/ 14 августа 2011

Я бы сделал это в два этапа, сначала удалите ненужные детали

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

А затем разбить строку на '-'

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