我一直在考虑一个正则表达式,它可以像这样转换一个列表:
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脚本)?
发布于 2009-06-12 18:04:11
我使用The Regex Coach。
发布于 2009-06-12 18:24:37
在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发布于 2009-06-12 18:03:18
我使用冒号是因为任何桌面操作系统都不允许在文件名中使用冒号,所以我是安全的。
不错的尝试。在GNU/Linux下是允许的。
更重要的是,您只给出了示例。您还没有描述正则表达式的用途。你也有一些明显毫无意义的结构,比如(?:),它们可能只是一个空格。
最后,不清楚冒号实际上起到什么作用,因为它不在替换文本中。如果你告诉我们你使用的是什么语言,也许会有所帮助。
https://stackoverflow.com/questions/988122
复制相似问题