首页
学习
活动
专区
圈层
工具
发布

Regex黑客
EN

Stack Overflow用户
提问于 2009-06-12 18:01:23
回答 3查看 194关注 0票数 1

我一直在考虑一个正则表达式,它可以像这样转换一个列表:

代码语言:javascript
复制
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 

进入:

代码语言:javascript
复制
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

到目前为止,我有一个部分工作的正则表达式:

代码语言:javascript
复制
^[^\.]+\. (.+?) (?:([0-9])(?: ))?([0-9]+\.[0-9]{2}) MB.*$

映射到

代码语言:javascript
复制
$1:$2$3

来完成转换。

我使用冒号是因为没有桌面操作系统允许在文件名中使用冒号,所以我是安全的。

我在没有任何正式方法的情况下构建了正则表达式(即通过使用直觉),同样的直觉告诉我这个正则表达式非常复杂和缓慢!

我希望RegExBuddy有一个在线版本或类似的东西。

我如何为同样的事情构建一个更好的RegEx?提示,提示..。

有没有什么免费/开放的工具可以让我分析我的正则表达式(除了编写Perl脚本)?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-06-12 18:04:11

我使用The Regex Coach

票数 2
EN

Stack Overflow用户

发布于 2009-06-12 18:24:37

在Perl中:

代码语言:javascript
复制
#!/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

输出:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2009-06-12 18:03:18

我使用冒号是因为任何桌面操作系统都不允许在文件名中使用冒号,所以我是安全的。

不错的尝试。在GNU/Linux下是允许的。

更重要的是,您只给出了示例。您还没有描述正则表达式的用途。你也有一些明显毫无意义的结构,比如(?:),它们可能只是一个空格。

最后,不清楚冒号实际上起到什么作用,因为它不在替换文本中。如果你告诉我们你使用的是什么语言,也许会有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/988122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档