如何将某些行文本、可变位置移动到特定列

How to move certain line text, variable position, to specific column

提问人:noydb 提问时间:2/6/2019 最后编辑:noydb 更新时间:2/6/2019 访问量:1154

问:

我有一个包含数百行的文本文件,我想将每行的特定结束块(可变的开始长度,“AS”之后的所有内容)移动到特定的列位置。

这是我需要定期完成的任务。我现在在Notepad ++中使用find-n-replace操作进行这种特殊的格式设置,但最后一步是繁琐的手动选项卡行。

原始模式是这样的(这是在通过find-n-replace操作进行一些初始格式化操作之后):

red.id red_identifier
red.c 和 red_color
mbr.red_mbr 一样red_member
stat.red_stat red_status

我希望格式是这样的,都是“AS ...”从第 X 列开始的部分:

red.id red_identifier
red.c 和 red_color
mbr.red_mbr 一样red_member
stat.red_stat red_status

任何帮助将不胜感激!这可以在 Notepadd++ 中处理吗?Python(我只知道的语言)脚本可取吗?

Python 搜索 记事本++ 文本格式

评论


答:

0赞 Paul T. 2/6/2019 #1

您可以使用 4 个单独的基于正则表达式的查找/替换来完成:
替换根据实现所需对齐所需的前导空格数量而变化。
column x

比赛的正则表达式:

enter image description here

更换后:

enter image description here

因此,每个组的正则表达式和替换将是:

查找内容: // 捕获文本 替换为: (7 个前导空格)$1 // $1 替换为捕获的文本
(?:(AS red_[i].+))AS red_identifier

Find what: // 捕获文本
替换为: (8 个前导空格)$1
(?:(AS red_[c].+))AS red_color

Find what: // 捕获文本
替换为: (2 个前导空格)$1
(?:(AS red_[m].+))AS red_member

这 3 个替换项将与最后一行对齐。当然,您可以调整间距,但示例中最后一行的正则表达式为:ASAS red_status

Find what: // 捕获文本
Replace by: (n 前导空格)$1 // 这里是您可能想要的任意数量的空格。
(?:(AS red_[s].+))AS red_statusn

如果将间距添加到第 4 行,则需要将此处使用的间距量添加到前 3 行以保持所需的对齐方式。column x

例如,如果在最后一行的 AS 之前需要 4 个额外的空格,则:

  • 第一线比赛需要 11 个前导空格才能达到 1 美元
  • 第 2 行比赛在 1 美元之前需要 12 个前导空格
  • 第 3 行匹配在 $1 之前需要 6 个前导空格

...以保持与 AS 对齐。column x

0赞 Toto 2/6/2019 #2

您可以通过 2 个步骤执行此操作:

  1. 将选项卡宽度修改为特定宽度,在这里,我使用的是 25enter image description here
    • Ctrl+H
    • 查找内容:\h+(?=AS\b)
    • 替换为:\t
    • check 环绕
    • check 正则表达式
    • Replace all

解释:

\h+         # 1 or more horizontal spaces
(?=         # start lookahead, zro-length assertion to make sure we have after:
  AS        # literally AS
  \b        # word boundary to make sure we don't match AS... (i.e. Asterisk)
)           # end lookahead

给定示例的结果:

red.id                   AS red_identifier
red.c                    AS red_color
mbr.red_mbr              AS red_member
stat.red_stat            AS red_status 

结果:

enter image description here