用户:  密码: 记住我     找回密码 
| 文章 >> 编程通用 >> 算法

正则表达式的文件名查找和替换

日期 | 作者中号哈里斯 | 浏览86 | 评分100 | 标签算法 评论
{A}{S0}简介
此应用程序的目的是,让您查找和替换文件名使用正则表达式。起初,你会发现这将是一个很奇怪的事情。考虑你有一个充满遵循两个不同的命名约定的文件的目录??都包含相同的信息,但只是显示它的不同。如果你想规范这些文件名,你会单独编辑每个文件名。重命名几千个文件是不是我的乐趣的想法,所以我写了这个程序查找和替换整个文件名。使用该程序
一旦你打开该程序,你可以选择的目录下面这英寸查找和替换选项以及子目录中找到。
查找和替换部分允许您输入您要查找和替换正则表达式。标准正则表达式语法在这里也适用。如果您正在寻找一种工具,在测试或设计正则表达式,我强烈建议代码项目。
在查找框中您还可以获得正则表达式的一个选项,如果不出意外,我建议你保持编译就因为它的速度相当区别转向。
在运行在你的文件名的正则表达式之前,我建议你先运行测试。这将做的一切,除了重命名的文件替换。使用这个可以让你看到的结果,并确保其正常工作。不能被撤销的文件重命名这个方案;我讨厌是毫无意义的垃圾转变成2000年的文件名!
测试正则表达式
,在"文件"菜单中的,你会发现的能力,以保存和加载"项目"。这只是保存的所有文本的价值观和检查以XML的形式,你可以上传在稍后的日期中的字段。我们的想法是,它可以节省你不必记住或重新写一个非常复杂的的正则表达式在未来。它是如何工作
这个程序的代码是难以置信的简单,它没有什么特别复杂。在frmReplace完成所有的文件名的实际处理。 ReplaceFiles方法做所有的工作,它得到的文件列表,然后其中超过一个正则表达式匹配检查每个迭代。如果有一个匹配,它写它作为一个新的项目清单控制,然后重命名该文件。
foreach (string file in files)

{

    // move the progress bar along

    pbReplace.Value = ++i;



    // find just the file name.. no need to replace anything in the path

    string name = Path.GetFileName(file);



    // does it match the expression?

    if (rex.IsMatch(name))

    {

        // find out the new name after replacement

        string newName = rex.Replace(name, replace);



        // the path that this came from

        string path = Path.GetDirectoryName(file);



        // add an item to the list showing the replacement



        lstReplacements.Items.Add(

            path + Path.DirectorySeparatorChar + name + " -> " + 

            path + Path.DirectorySeparatorChar + newName);



        // don't rename the file if this is only a test run

        if (!testOnly)

        {

            // rename the file

            File.Move(path + Path.DirectorySeparatorChar + name, 

                path + Path.DirectorySeparatorChar + newName);

        }

    }

}

结论
这是一个很短的文章,是不是真的更可以在一个程序只有60行左右的代码,没有任何激动人心的覆盖!我希望你找到该程序有用。历史二零零七年二月10日:第一个公开版本。
关于作者:中号哈里斯


中国
我是一名编程爱好者,
谢谢orcode.com为我们提供一个学习和分享的平台。
有什么问题。可以就本内容回复,我看到时。会尽量回复的。
评论会员:BucanerO_Slacker 时间:2011/12/07
我已经发布了一个正则表达式测试器工具的新版本。您可以下载免费http://www.codeproject.com/KB/string/regextester.aspx http://sourceforge.net/projects/regextester

使用正则表达式测试仪,你可以充分开发和测试正则表达式对一个目标文本。它的用户界面设计,以帮助您在开发正则表达式。它采用和支持。NET Regex类的所有的功能。
评论会员:avnersimon 时间:2011/12/07
请正确的功能...
从.... txtDirectory.Text = Path.GetDirectoryName(dlgOpen.FileName); txtDirectory.Text = Path.GetDirectoryName(dlgOpen.FileName.ToString ());{ BR}
所以它的功能OK
======================={ BR}(dlgOpen.ShowDialog()== DialogResult.OK)
{
 0;txtDirectory.Text = Path.GetDirectoryName(dlgOpen.FileName.ToString ());{ BR}}

{S2}
评论会员:Gast128 时间:2011/12/07
我已经在过去有关文件重命名的文章,没有得到太多的关注(见"文件重命名使用升压的regex和提高文件系统")。这篇文章还Boost.FileSystem和Boost.Regex使用Boost库。

很明显,你的文章使用C#和一个"更清晰"桂

西九龙填海区

评论会员:psyphen 时间:2011/12/07
我喜欢煎饼


评论会员:小号道格拉斯 时间:2011/12/07
psyphen写道:我喜欢煎饼

没有枫糖浆? {S3}
{S4}的

恕我直言,我必须同意。在中层管理人员在几乎任何公司的快速查找,显示渡渡鸟不仅存活下来,它的音响在创纪录的数字。克里斯托弗邓肯
评论会员:LBA再加 时间:2011/12/07
嗨,
良好的学习使用REG - EX的文章,但你知道重命名硕士(http://www.joejoesoft.com/rm.php)?这是一个真正强大的文件重命名,我经常使用的工具。

感谢您的文章,
LBA再加

评论会员:克里斯奥斯汀 时间:2011/12/07
我只是说{五}

我最近写了一个类似的应用程序,自己一个人是害怕命令行客户端。看来,我们采取了类似的方法,很好看,我不是疯狂的朋友曾告诉我,当我说,我会使用的RE

干杯


一个人应该是能够改变的尿布,计划入侵,屠宰猪的,CONN船舶,设计的建筑物,写一首十四行诗,余额账户,建立一个墙,设置了骨,安慰垂死的,拿订单,给订单,合作,单独采取行动,解决方程,分析新问题,俯仰粪便,计算机编程,烹调出美味的餐,争取有效地,勇敢地死去。
专业化是昆虫。 - 拉撒路龙
评论会员:mikellekim 时间:2011/12/07
当你重命名那些事件,你可能想要做的事情之一,就是要改变它们存储在其中的文件夹结构。纠正我,如果我错了,但似乎目前不支持。
评论会员:M哈里斯 时间:2011/12/07
无不是我怕,这只是文件名。最后,我可能会更新,让您在替换窗口中插入。NET代码做更换,你如何选择,它wouldnt很难。

-
真正的程序员不评论他们的代码。这是很难写,它应该是不难理解{BR​​}
评论会员:。mikellekim 时间:2011/12/07
RenameIt有一个略有不同的接口,但具有相同的基本思路,以及一对夫妇的非正则表达式的重命名功能。 SourceForge项目,近年来没有看到太多的活动,但工具已经自1998年以来,在周围的各种版本和地方。

评论会员:M哈里斯 时间:2011/12/07
有趣的,我没有看到它之前。多数民众赞成与SF的问题,很多人创建自己的项目卖力和兴奋,然后当它不会得到多少利益,他们忘掉它,永远不会改变它{S6}

我敢肯定,如果你看,你会发现在这些不同的完成阶段3或4,周围SF嘿嘿。

-
真正的程序员不评论他们的代码。这是难写,应该不难理解{BR​​}
评论会员:丹尼尔Kamisnki 时间:2011/12/07
您好,看起来像这样一个伟大的想法!你能为我们编译一个32位版本,是在不断变化的慢的更新的操作系统?
您张贴NET 1.1的代码?


丹尼尔
评论会员:中号哈里斯 时间:2011/12/07
x86版本应该是32位,如果它不会运行,它可能是邪恶的东西,Vista的 - 所以我会在工作中重新编译,然后重新发布

做NET 1.1中的代码会有点痛,其所有在VS2005做 - 将不得不重新创建整个项目。

-
真正的程序员不评论他们的代码。这是很难写,它应该是不难理解{BR​​}
评论会员:。丹尼尔Kamisnki 时间:2011/12/07
在XP x86的作品,但看起来像我需要有NET 2.0中运行它!太糟糕了,变化还没有准备好...太多的项目上1.1的那一刻!

感谢您的帮助,
丹尼尔
评论会员:M哈里斯 时间:2011/12/07
。继续安装NET 2.0,它运行并排1.1就好了。您可以安装两个版本。此外,2.0将运行任何1.1的应用程序。

-
真正的程序员不评论他们的代码。这是很难写,它应该是不难理解{BR​​}
评论会员:。sharpiesharpie 时间:2011/12/07
我的车的备胎占用空间,我可以用别的东西。但总有一天会发生的事件和备用轮胎是唯一,这将有助于。

你的文章处理特定的问题,你很好。虽然你可能不使用它每天的,是这个职位的最佳工具。

干得好,

杰夫{七}

PS我喜欢你的尾注:"真正的程序员不评论他们的代码,这是很难写,应该不难理解了。"
评论会员:M哈里斯 时间:2011/12/07
我的意思是,它是一个好主意,但是,为什么你会使用它的regex呢?你可以简单地使用string.Contains方法你不能呢?
评论会员:sharpiesharpie 时间:2011/12/07
哈哈,正是马克克利夫顿问

好了,所以考虑你撕开一些电视节目从某些DVD的你自己。然而多年来,你改变stargate.sg - 1.s09e20.avi从星际之门SG - 1 [6x09] Allegiance.avi说您使用的命名格式和另一个显示甚至criminal.minds.204.avi。
如果你想以规范所有这些,使他们在Windows媒体中心,以相同的顺序,而不是所有的地方,你不得不去,并重新命名每一个。
现在考虑您使用发现这个正则表达式:
([\ W \ \ S - _] ?)(?: \ S | \)S \ .?(((? \ D \ D)(\ D \ D))|??(\ [ 0 X \])(\ D)(\ D?)|?(?S0(\ D)E(\ D ))).*? \ AVI

那么这个正则表达式替换:
$ {NAME} $ {季节} $ {集}。AVI

以上这3个显示更名为
星际之门SG - 1.609.avi
stargate.sg 1.920.avi
criminal.minds.204.avi

然后,您可以做一个正则表达式替换空格内情节609的名称是""如果你想。

就我个人而言,我恨切换DVD的观看节目 - 他们得到划伤和暴露的元素,如 - 最终没有任何更多的工作。澳大利亚的法律,让我们做了我们所有的DVD的数字拷贝的为了防止这种情况,所以我RIP他们到磁盘。我大约有1500电视秀节目,我的媒体PC规范的名称,将相当的时间耗费{五}
就没有办法使用string.Contains查找或替换文件名,并保留一些原始数据,当你考虑上面的例子。
希望这是有道理的,你不只是简单的查找和替换,其查找和替换一个复杂的格式信息可能需要移动或至少保持{五}

-
真正的程序员不评论他们的代码。这是很难写,应该不难理解{BR​​}
评论会员:中号哈里斯 时间:2011/12/07
好了,真正的,说实话,我从来没有真正能够理解正则表达式,也可以,我觉得他们任何良好的文档:\

好文章BTW。
评论会员:德里克阅读 时间:2011/12/07
正则表达式是实力强劲的,我不能没有他们。我了解到他们回来时在Perl 5年前。起初,他们似乎有点吓人,但一旦你学会使用它们,他们都非常非常酷{五}我可能会写文章使用它们。

与此同时,你可以看看这些:



-
真正的程序员不评论他们的代码。这是很难写,应该不难理解{BR​​}
 文章分类
 桌面
 网页开发
 移动开发
 数据库
 多媒体
 编程语言
 平台,框架和库
 编程通用
 图形/设计
 开发周期
 一般阅读
 第三方产品
 作者资源
 其他
快速解答标签
c x 6850
VC x 7405