2013-07-25 74 views
1

我在一个文件中的格式如下:正则表达式的字符串替换在记事本++

011890111,MFCD00005493 

我需要把所有的线路为:

update [dbname].iwfs_part_search_tb set mdl_number='MFCD00005493' where condensed_part_number = '011890111'; 

我不知道的一种方式,我可以在Notepad ++中使用正则表达式来进行某些匹配,然后包装这些匹配,并在我想用它们替换它们的内容中使用它们,而不是替换整个匹配项。有人能帮助我吗?

+0

应该可以与一些正则表达式,但我一直与复杂的正则表达式的问题(应该寻找一些好的教程).. 。但是,如果您只是寻找一些快速解决方案,则可以在某些电子表格中导入文件,添加缺少信息的列,然后导出到文本文件。做了这一两次作为一个快速(是的,肮脏但快速)解决方法... – Martin

+0

马丁,我真的结束了这样做......有38K行需要修改。逐列操作比在其上运行正则表达式要容易得多。只是不要说smemy ....;) – ResourceReaper

+0

是的,这是一种“跛脚”的解决方案,这就是为什么我没有把它作为答案,但最终,如果你有一些结果要完成工作,你不能等到你得到最好的解决方案... :) – Martin

回答

10

试试这个:

查找内容:([0-9]+),([A-Z]+[0-9]+)
替换:update [dbname].iwfs_part_search_tb set mdl_number='$2' where condensed_part_number = '$1';

那么显然确保正则表达式检查。

发生了什么事?

([0-9]+) - pamentalhesis表示“捕获组”,[0-9]+表示任意数量的“一个或多个”。
, - 逗号,不在捕获组或任何东西中......只是一个逗号
([A-Z]+[0-9]+) - 另一个捕获组,它包含一个或多个大写字母后跟一个或多个数字。

然后可以在Notepad ++中的“替换为”字段内使用$,然后使用该组的索引,然后使用上面的“捕获组”。第一组($1)用于逗号前的数字组,而第二组($2)用于逗号后的字母和数字组。

测试:

011890111,MFCD00005493 
011891232,MDAN00032492 
011853233,MFCD00005444 
011892121,MFCD
011812341,MAAS00005493 

变为:

update [dbname].iwfs_part_search_tb set mdl_number='MFCD00005493' where condensed_part_number = '011890111'; 
update [dbname].iwfs_part_search_tb set mdl_number='MDAN00032492' where condensed_part_number = '011891232'; 
update [dbname].iwfs_part_search_tb set mdl_number='MFCD00005444' where condensed_part_number = '011853233'; 
update [dbname].iwfs_part_search_tb set mdl_number='MFCD' where condensed_part_number = '011892121'; 
update [dbname].iwfs_part_search_tb set mdl_number='MAAS00005493' where condensed_part_number = '011812341'; 
+0

我通过N ++运行它,这是完美的!谢谢smemy :) – ResourceReaper

+0

所以在正则表达式上的问题,[0-9]匹配所有字符0-9,但是之后的'+'是什么意思? – ResourceReaper

+1

“+”的意思是“一个或多个”,因此,“a [0-9] + b”将匹配“a0b”以及“a0219412084219b”等。[0-9]'会只匹配一个数字,'a [0-9] * b'会匹配“零个或多个”,所以“ab”或“a93248b”。 – smerny