【问题标题】:Regex, how to remove Linefeeds in a pipe delimted file EXCEPT after the nth |?正则表达式,如何在第 n 个 | 之后删除管道分隔文件中的换行符?
【发布时间】:2016-07-19 19:16:17
【问题描述】:

我有一个管道分隔文件,每行 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++ 进行测试)

【问题讨论】:

  • FirstField|Them|Where|PHONE|这包含
    一个
    LineFeed 或两个或更多|.....|LastField
  • 你是指34个管道和35个字段,还是35个管道和36个字段?
  • 这不太适合正则表达式,我建议改为编写一个简短的 Python 脚本。

标签: regex notepad++


【解决方案1】:

您可以利用 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 脚本 -> 脚本来调用它em> -> replace_lbr_inblock.

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

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

之前:

之后:

【讨论】:

  • 只有在你的数据中有|,或者列数不固定(尽管提到列数是固定的)时才会中断。请告知数据中的| 是否可能(以转义形式?)。
猜你喜欢
  • 2016-02-07
  • 1970-01-01
  • 2019-05-07
  • 1970-01-01
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多