代码之家  ›  专栏  ›  技术社区  ›  user2433705

在记事本++中或使用Python合并行

  •  0
  • user2433705  · 技术社区  · 7 年前

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

    • 每一行都应该以 500
    • 有不以开头的行 500 (2号线、4号线,基本上都是偶数线)

    我想做什么:

    • 不以开头的行 500
    • 合并后,应添加其他分号(即。 <Line 1>;<Line 2> ).

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

    正则表达式in 记事本++ 也可能有效。我听说我应该使用多行模式,但我不知道怎么做。也许这并不难,但我很难处理它。

    谢谢

    此处输入(简化):

    ;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 回复  |  直到 7 年前
        1
  •  1
  •   Gurmanjot Singh    7 年前

    尝试此正则表达式:

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

    将每个匹配项替换为 ;

    Click for Demo

    说明:

    • [\r\n]+ -匹配换行符或回车符出现的次数超过1次
    • (?!;500) -负前瞻,确保当前位置后面没有 :500

    更换前:

    enter image description here

    更换后:

    enter image description here

        2
  •  0
  •   Jean-Francois T.    7 年前

    使用 Notepad++ 对于这种简单的更改。

    1. 代替 菜单( Ctrl键 + H )
    2. 选择 正则表达式 ( 中高音 + G )
    3. 输入以下值:

      • 查找什么 : [\r\n]+(;(?!500))
      • : \1
    4. 点击 全部替换 ( 中高音 + A. )

        3
  •  0
  •   Srdjan M.    7 年前

    正则表达式 : \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