如何从文本文件中有条件地删除CRLF,最好是在Notepad ++中

时间:2012-05-29 14:03:07

标签: regex text import notepad++ regex-negation

我一直在寻找这一天,这是我找到的最接近的useful ref

我的问题:从封闭系统导入大量文件(不能在源头更改)并需要导入。这些文件是|分开并在每行末尾有一个CRLF (直到最后一个)。现在,他们发现在文本中包含一个可以包含CR和CRLF文本的新类型很有趣(<br>)。

因此,在我可以在我们的系统中处理此文件之前,我需要做的是替换所有不在前面的CRLF和CR出现。到<br>,以便每一行都以000 |之类的代码开头...... 600 |

最接近我的Notepad ++: 查找:(?<![\|])[\r\n]+$

替换:<br>

问题在于它不会为每个crlf提供<br>,在cr之后错过crlf ...其他尝试选择| crlf也完全忘记了CR。

任何想法都非常感激。请记住,文件可能超过500MB(使事情复杂化)

文件摘录:

000|709076|153943|11||1|CRLF 
300|709076|153943|11|4|20000729||Majo509|CRLF 
500|709076|153943|11|6|3-3BNME|20000729|||21.13|4||20120509|CRLF 
600|709076|153943|11||SBV|7103||||20120509|CRLF 
600|709076|153943|11||SBV|7105||||20120509|CRLF 
600|709076|153943|11||SBV|7607||||20120509|CRLF 
600|709076|153943|11||MC||EVALUATIEROOSTER NIET INGEVULD :CR
CRLF 
------------------------------CR
CRLF 
CRLF 
Gezien U het evaluatierooster niet heeft ingevuld, blijft CR
CRLF 
CRLF 
|||20120509|CRLF 
600|709076|153943|11||SBV|7517||||20120509|CRLF 
000|709209|154072|9||1|Dne|LA1349|3100||L|20120509|CRLF 
300|709209|154072|9|3|20HEM-AT20120509|CRLF 
500|709209|154072|9|6|3-3BNME|20000908|||15.4|3||20120509|CRLF 
600|709209|154072|9||SBV|7103||||20120509|CRLF 
600|709209|154072|9||MC||AFSCHAFFING VAN DE EVOOR HET CR
CRLF 
(DE) GEBOUW(EN) CR
CRLF 
CR
CRLF 
indien U huurder of gebruiker bent.|||20120509|CRLF 
600|709209|154072|9||MC||DIEFSTAL  CRLF 

...

必填结果:(粗略复制粘贴作业;))

000|709076|153943|11||1|CRLF 
300|709076|153943|11|4|20000729||Majo509|CRLF 
500|709076|153943|11|6|3-3BNME|20000729|||21.13|4||20120509|CRLF 
600|709076|153943|11||SBV|7103||||20120509|CRLF 
600|709076|153943|11||SBV|7105||||20120509|CRLF 
600|709076|153943|11||SBV|7607||||20120509|CRLF 
600|709076|153943|11||MC||EVALUATIEROOSTER NIET INGEVULD :<BR><BR>---------------------<BR><BR><BR>Gezien U het evaluatierooster niet heeft ingevuld, blijft <BR><BR>||20120509|CRLF 
600|709076|153943|11||SBV|7517||||20120509|CRLF 
000|709209|154072|9||1|Dne|LA1349|3100||L|20120509|CRLF 
300|709209|154072|9|3|20HEM-AT20120509|CRLF 
500|709209|154072|9|6|3-3BNME|20000908|||15.4|3||20120509|CRLF 
600|709209|154072|9||SBV|7103||||20120509|CRLF 
600|709209|154072|9||MC||AFSCHAFFING VAN DE EVOOR HET <BR><BR>(DE) GEBOUW(EN) <BR><BR><BR><BR>indien U huurder of gebruiker bent.|||20120509|CRLF 
600|709209|154072|9||MC||DIEFSTAL  CRLF 

2 个答案:

答案 0 :(得分:1)

哇,这个人分了我一会儿...... 一次性完成这件事很棘手。

N ++约束可能会使它变得比它需要的更难,但是如果没有编写一些代码来做你想做的事情,我认为这是一个很好的方法。

虽然我不确定它是否最佳,但我在这个组合中取得了成功 发现:

  

<强>([^ |])\ R(\ r \ n])的*

替换:

  

<强> $ 1·峰; br&GT;

您需要在替换中获得1美元,否则您将丢失替换线中的角色 - 可能不是您想要的!

理想情况下,你应该研究一些Perl(我不是perl的拥护者,其他可以处理正则表达式的脚本语言......)或其他东西。

编辑: 只是一个想法。这假设您的文件中没有包含| CRLF或| CR或| CRCR的部分不是“真正的”行结尾。

答案 1 :(得分:1)

编辑:废弃我最后的建议 - 没有用

根据BunjiquoBianco的建议,我认为这是不可能的。

如果你能使用awk会好得多。如果您使用的是Windows,请尝试http://gnuwin32.sourceforge.net/packages/gawk.htm

如果awk是一个可行的选项,请重新询问问题,awk坚果可能会建议从命令提示符中解析整个文件。

awk也很快 - 会给你一个更快的转换,并且可以更容易地包含在其他脚本中,从而切断任何手动N ++过程。