正则表达式,如何删除管道分隔文件中的换行符除了第n | |后?

时间:2016-07-19 19:16:17

标签: regex notepad++

我有一个管道分隔文件,每行有35个管道。在第35个字段后面有一个预期的换行符。例如:

FirstField|ME|HERE|PHONE|Description|.....|LastField
FirstField|YOu|THERE|PHONE|Description|.....|LastField

但是,管道之间的某些数据(例如在描述字段中)包含换行符。例如:

FirstField|Them|Where|PHONE|This contains a
LineFeed
Or two
or more|.....|LastField

问题是,如何删除35个字段中任何一个字段中的换行符,但不是在行尾?

(注意:我正在使用Notepad ++进行测试)

1 个答案:

答案 0 :(得分:5)

您可以使用Notepad ++ PythonScript插件。

See instructions on how to install a working version here并创建以下脚本文件:

def repl(match):
    return match.group(0).replace("\r\n", "").replace("\n", "").replace("\r", "")

editor.rereplace(r'^[^|]*(?:\|[^|]*){36}$', repl)

如果您将脚本文件命名为replace_lbr_inblock.py,则可以通过选择插件 - >来调用它。 Python脚本 - > 脚本 - > replace_lbr_inblock

正则表达式^[^|]*(?:\|[^|]*){36}$匹配

  • ^ - 行的开头
  • [^|]* - 除|
  • 以外的零个或多个字符
  • (?:\|[^|]*){36} - 一个|的36个序列,后跟零个或多个管道
  • $ - 行尾。

在:

enter image description here

后:

enter image description here