Regex hackery - PullRequest
       10

Regex hackery

1 голос
/ 12 июня 2009

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

1. 10.Things.I.Hate.About.You[1999]DvDrip[Eng]-Ray 699.68 MB 
2. 100.Feet.2008.DvDRip-FxM 701.14 MB 
3. 11 - 14 1 286.22 MB 
4. 13_going_on_30(2004)[Brizzly] 700.23 MB 
...
1 523. Waz 699.93 MB 
1 524. We.Own.the.Night[2007]DvDrip[Eng]-Ray 700.87 MB 
1 525. Webs [2003]DVDRip[Xvid AC3[5.1]-RoCK&BlueLadyRG 1 347.70 MB 

в

10.Things.I.Hate.About.You[1999]DvDrip[Eng]-Ray,699.68 MB
100.Feet.2008.DvDRip-FxM,701.14
11 - 14,1286.22
13_going_on_30(2004)[Brizzly],700.23 
...
Waz,699.93
We.Own.the.Night[2007]DvDrip[Eng]-Ray,700.87
Webs [2003]DVDRip[Xvid AC3[5.1]-RoCK&BlueLadyRG,1347.70

Предположение: размер файла никогда не превышает 9999,99 МБ

Пока у меня есть частично работающее регулярное выражение:

^[^\.]+\. (.+?) (?:([0-9])(?: ))?([0-9]+\.[0-9]{2}) MB.*$

, который отображается на

$1:$2$3

для завершения преобразования.

Я использовал двоеточие, потому что ни одна настольная ОС не позволила бы это в имени файла, поэтому я в безопасности.

Я построил регулярное выражение без какого-либо формального метода (то есть с помощью интуиции), и та же самая интуиция подсказывает мне, что это регулярное выражение ужасно сложное и медленное!

Я бы хотел, чтобы у RegExBuddy была онлайн-версия или что-то подобное.

Как мне построить лучший RegEx для того же? Советы, подсказки ...

Есть ли какой-нибудь бесплатный / открытый инструмент, который позволил бы мне профилировать свое регулярное выражение (кроме написания сценария Perl)?

Ответы [ 3 ]

2 голосов
/ 12 июня 2009

Я использую Regex Coach .

2 голосов
/ 12 июня 2009

В Perl:

#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

while ( <DATA> ) {
    no warnings 'uninitialized';
    next unless /^[^.]+\. (.+?) (?:(\d+) )?(\d+(?:.\d+)?) MB$/ ;
    print "$1,$2$3\n";
}

__DATA__
1. 10.Things.I.Hate.About.You[1999]DvDrip[Eng]-Ray 699.68 MB
2. 100.Feet.2008.DvDRip-FxM 701.14 MB
3. 11 - 14 1 286.22 MB
4. 13_going_on_30(2004)[Brizzly] 700.23 MB
...
1 523. Waz 699.93 MB
1 524. We.Own.the.Night[2007]DvDrip[Eng]-Ray 700.87 MB
1 525. Webs [2003]DVDRip[Xvid AC3[5.1]-RoCK&BlueLadyRG 1 347.70 MB

Выход:

C:\Temp> zcx
10.Things.I.Hate.About.You[1999]DvDrip[Eng]-Ray,699.68
100.Feet.2008.DvDRip-FxM,701.14
11 - 14,1286.22
13_going_on_30(2004)[Brizzly],700.23
Waz,699.93
We.Own.the.Night[2007]DvDrip[Eng]-Ray,700.87
Webs [2003]DVDRip[Xvid AC3[5.1]-RoCK&BlueLadyRG,1347.70
0 голосов
/ 12 июня 2009

«Я использовал двоеточие, потому что ни одна настольная ОС не позволила бы это в имени файла, поэтому я в безопасности.»

Хорошая попытка. Это разрешено в GNU / Linux.

Что более важно, вы привели только примеры. Вы не описали, что регулярное выражение предназначено сделать . У вас также есть явно бессмысленные конструкции, такие как (?:), Которые могут быть просто одним пробелом.

Наконец, неясно, какую роль на самом деле играет двоеточие, поскольку ее нет в тексте замены. Возможно, было бы полезно, если бы вы сказали нам, какой язык вы используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...