本文共 2065 字,大约阅读时间需要 6 分钟。
--start
今天遇到一个说简单不简单,说难不难的问题,问题是这样的,有一个文件,格式如下: [quote] 1109,2009/4/15,15:51,当社,その他,振込,"25万入金。(03)9月、10月分充当、(02)2月不足分、 3月分、4月利息一部に充当 " 442,2009/4/15,17:41,自宅,本人,電話架,"留守電に16日か17日のどちらに来社されるか絡くれと入れる。 " 1109,2009/4/16,12:36,当社,本人,来社,"(阿部さん同席)納税金は10月までに分割で払うつもりでいる延滞し 11月の更新もできません。そうした場合、何かえありますか?一番いい方法はありますか?ご家族に相談して 1109,2009/4/27,9:09,当社,本人,電話受,"5月1日に延滞分と、あと差押分も払予定です。金に関しては、銀行 555,2009/4/27,10:03,当社,本人,電話受,"FAX受け取りました。5月分はまた別でいいですか?連休明け 1109,2009/4/28,10:03,自宅,本人,文書送達,"ライフ住宅ローンから融資検討可の返事がたので、事前相談表 333,2009/4/28,12:08,自宅,本人,文書送達,見えにくいので郵送してくれとのこと。 1109,2009/4/30,16:12,当社,本人,電話受,"入金確認しました。税金滞納分も払いました。FAXした方がい 1109,2009/4/30,16:21,当社,本人,文書受領,"納付書確認。途電話あり。帯債務者の件は、GW明けにまた連絡 1109,2009/5/7,9:38,当社,本人,電話受,"今日入金しますとの連絡。社の件はもう少し待ってほしいとのこと 1109,2009/6/16,9:22,当社,本人,電話受,"今週中に290万ぐらいいれて、残高を500万ぐらいにますとのこと。 500万になったら返済はどうなるか折り返し電話る。 " 333,2009/6/16,13:15,当社,本人,電話受,"書面見ました。大体わかりましたので、検討してた連絡しますと 1109,2009/6/18,17:41,当社,その他,振込,"992,453円入金あり。 100万口完済。消の件、書面自宅にファックス。 " 344,2009/6/19,16:54,当社,本人,電話受,"今日も入金確認してますか?今日は入ってません。息子さんが入 [/quote] 文件大约有几万行,现在要求你把类似第2,5,14,17行提升到上一行。我使用的文本编辑器是 EmEditor,如果要查询正常的行则非常简单,只要查询以若干个数字开头,后接一个逗号的行,使用如下正则表达式:[b]^\d+[/b],如果要查询不正常的行,我想使用如下的正则表达式应该可以:[b]^[^\d+,][/b] 然而却不行,后来我想是不是因为缺少括号,于是如下的正则表示式:[b]^[^(\d+,)][/b] 结果还是不行,琢磨了半天也没写出这个正则表达式到底该怎么写,没有办法,只好请教我们部长,就在我给他陈述这个问题的时候,我突然明白,之所以没有找出不正常的行是因为它们也是以数字开头,正常的行也是以数字开头,既然我们能找出正常的行,我们可以给正常的行加个前缀,让它不以数字开头不就可以了吗?整个过程如下: --[b]第一步:目的是给正常的行加前缀,让它们不以数字开头[/b] [quote] Find:^(\d+,) Replace with:GGGG\1 [/quote] --[b]第二步:把不正常的行提升到上一行[/b] [quote] Find:\n(\d) Replace with:\1 [/quote] --[b]第三步:把正常的行前缀去掉[/b] [quote] Find:^GGGG Replace with: [/quote] 后来,我们部长提供了另一种解决方案,如下: --[b]第一步:给正常的行加前缀,目的是表示换行位置[/b] [quote] Find:^(\d+,) Replace with:GGGG\1 [/quote] --[b]第二步:把所有的换行符都替换了[/b] [quote] Find:\n Replace with: [/quote] --[b]第三步:把第一步加的前缀替换成换行符[/b] [quote] Find:GGGG Replace with:\n [/quote] 无论哪种解决方案,都增加了中间步骤,最开始我就想一步达到目的,所以想了好半天也没想出这个表达式该怎么写。通过这个案例,给我的思考是:发现问题的真正所在,有时候不一定要一次达到目的,可以增加中间目标,一步一步实现。当然,哪位朋友有更好的解决方案,请一定要告诉我。 --[b]声明:转载请注明出处。[/b] --last updated 2009.11.25 --written by wave at 2009.11.25 --end