在Notepad ++中合并行或使用Python

时间:2018-02-24 16:07:28

标签: python regex notepad++

我有一个长文件,结构如下:

  • 每一行都应以500
  • 开头
  • 有些行不以500开头(第2行,第4行,基本上每个偶数行)

我想做什么:

  • 不以500开头的行应该与上面的偶数行合并(因此第2行包含第1行,第4行包含第3行,等等)。
  • 一旦合并,应添加额外的分号(即<Line 1>;<Line 2>)。

我如何在python(2.7)中轻松完成?

Notepad ++ 中的正则表达式也可以使用。我听说我应该使用多线模式,但我不知道该怎么做。可能它甚至不是很难,但我很难处理它。

感谢。

这里输入(简化):

;500;616;;”YPO_INV”;”KP”;”51D0072”;”YNU”
;”     6,291.00”;;
;500;6900;;”YPNV”;”KE”;”53213072”;”YOU”
;”     6,991.00”;;

screenshot Notepad++

预期产出:

;500;616;;”YPO_INV”;”KP”;”51D0072”;”YNU”;;”     6,291.00”;;
;500;6900;;”YPNV”;”KE”;”53213072”;”YOU”;;”     6,991.00”;;

3 个答案:

答案 0 :(得分:1)

试试这个正则表达式:

[\r\n]+(?!;500)

将每个匹配替换为;

<强> Click for Demo

<强>解释

  • [\r\n]+ - 匹配1行以上的换行符或回车符
  • (?!;500) - 负向前瞻以确保当前位置未被:500
  • 跟踪

替换之前:

enter image description here

替换后:

enter image description here

答案 1 :(得分:0)

正则表达式\n^(?!;500)

详细说明:

  • ^在行的开头断言位置
  • (?!)否定前瞻

Python代码

text = open(r'C:\....txt').read()
r = re.compile(r'\n^(?!;500)', re.M)
text = r.sub(';', text)

输出:

;500;616;;”YPO_INV”;”KP”;”51D0072”;”YNU”;;”     6,291.00”;;
;500;6900;;”YPNV”;”KE”;”53213072”;”YOU”;;”     6,991.00”;;

Demo code

答案 2 :(得分:0)

使用Notepad++进行此类简单更改。

  1. 转到替换菜单( Ctrl + H
  2. 选择正则表达式 Alt + G
  3. 输入以下值:

    • 查找内容[\r\n]+(;(?!500))
    • 替换为\1
  4. 点击全部替换 Alt + A