问题描述
我正在清理以管道分隔的平面文件,但遇到了一个问题,即我在整个文件中有随机的 CRLF,这些 CRLF 将有效记录(带有 24 个预期分隔符)破坏为跨后续行的部分记录。
>这些 CRLF 的位置似乎相对随机,并且每条记录的这些 CRLF 的数量各不相同。举个例子:
这是我所看到的(使用更简单的 3 个分隔符示例):
this|is|a|test
don't|be
alarmed|
if|there
is|a|broken|record
above|this|is|expected
可以看到第 2、3、4 行都是部分记录,应该是单条记录,有 3 个预期的分隔符。
这是我希望看到的/我正在尝试制作的:
this|is|a|test
don't|be alarmed|if|there
is|a|broken|record
above|this|is|expected
我清理这部分的目的是:
我主要在 Jupyter 笔记本中执行此操作。以下是迄今为止显示出希望的一种方法。
这是我的方法:
-
识别以下行: 没有 24 个分隔符 和 未遵循 一行 24 个分隔符
- 使用以下正则表达式执行此操作:
^(?!(.*?\|){24}).*\n(?!(.*?\|){24}.*\n)
- (上述第二部分的基本原理是忽略部分记录的最后一行,因此我们不会用下面的替换来弄乱随后的好行)
- 使用以下正则表达式执行此操作:
-
然后我可以使用 re.sub() 函数将那些行的 '\n' 替换为 ' '
This has worked with the small 3-delimiter sample data 我在上面的例子中展示了,但是由于“灾难性回溯”,我的正则表达式在规模上失败了。事实上,即使有 6 条记录的真实数据样本,它也会由于灾难性的回溯而失败。
关于改进我的正则表达式以避免灾难性回溯的任何想法或建议,或有关如何解决此类 CRLF 问题的任何其他建议。
非常感谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)