我一直在考虑一个可以转换这样一个列表的正则表达式:
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.99MB
到目前为止,我有一个部分工作的正则表达式:
^[^\.]+\. (.+?) (?:([0-9])(?: ))?([0-9]+\.[0-9]{2}) MB.*$
映射到
$1:$2$3
完成转型。
我使用了冒号,因为没有桌面操作系统允许在文件名中使用冒号,所以我很安全。
我没有任何形式的方法(即通过使用直觉)构建了正则表达式,并且同样的直觉告诉我这个正则表达式是非常复杂和缓慢的!
我希望RegExBuddy有一个在线版本或类似的东西。
如何构建更好的RegEx?提示,提示......
是否有任何免费/开放工具可以让我描述我的正则表达式(除了编写Perl脚本)?
答案 0 :(得分:2)
我使用The Regex Coach。
答案 1 :(得分:2)
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
答案 2 :(得分:0)
“我使用了冒号,因为没有桌面操作系统允许在文件名中使用冒号,所以我很安全。”
很好的尝试。它在GNU / Linux下是允许的。
更重要的是,您只提供了示例。您尚未描述要执行的正则表达式。你也有明显无意义的结构,比如(?:),它可能只是一个空格。
最后,目前还不清楚冒号实际扮演什么角色,因为它不在你的替代文本中。如果你告诉我们你正在使用什么语言,也许会有所帮助。