如何将特定行文本、可变位置移动到特定列
How to move certain line text, variable position, to specific column
我有一个包含数百行的文本文件,我想将每行的特定结束块(可变的开始长度,"AS" 之后的所有内容)移动到特定的列位置。
这是我需要经常做的任务。我现在在 Notepad++ 中使用 find-n-replace 操作进行这种特殊格式化,但最后的步骤是繁琐的手动标签行。
原始模式如下(这是在通过 find-n-replace 操作进行一些初始格式化操作之后):
red.id AS red_identifier
red.c 作为 red_color
mbr.red_mbr 作为 red_member
stat.red_stat AS red_status
我希望格式如下所示,所有 "AS ..." 部分从 x 列开始:
red.id AS red_identifier
red.c AS red_color
mbr.red_mbr AS red_member
stat.red_stat AS red_status
非常感谢任何帮助!这可以在 Notepadd++ 中处理吗? Python(我只知道语言)脚本可取吗?
你可以用 4 个独立的基于正则表达式的 find/replace:
替换取决于实现所需 column x
对齐所需的前导空格数。
匹配的正则表达式:
替换后:
因此每个组的正则表达式和替换为:
查找内容:(?:(AS red_[i].+))
// 捕获 AS red_identifier
文本
替换为:(7 个前导空格)$1 // $1 被捕获的文本替换
查找内容:(?:(AS red_[c].+))
// 捕获 AS red_color
文本
替换为:(8 个前导空格)$1
查找内容:(?:(AS red_[m].+))
// 捕获 AS red_member
文本
替换为:(2 个前导空格)$1
这 3 个替换将与最后一行 AS red_status
对齐 AS
。您当然可以调整间距,但示例中最后一行的正则表达式为:
查找内容:(?:(AS red_[s].+))
// 捕获 AS red_status
文本
替换为:(n 个前导空格)$1 // n
这里可以是您可能需要的任意数量的空格。
如果您将间距添加到第 4 行,则此处使用的间距量需要添加到前 3 行以保持所需的 column x
对齐。
例如,如果您希望在最后一行的 AS 之前有 4 个额外的空格,则:
- 第一行匹配需要在 $1 之前有 11 个前导空格
- 第 2 行匹配在 $1 之前需要 12 个前导空格
- 第 3 行匹配在 $1 之前需要 6 个前导空格
... 使 column x
与 AS 对齐。
您可以分两步完成此操作:
- 修改tab宽度为指定宽度,这里我用的是25
- Ctrl+H
- 查找内容:
\h+(?=AS\b)
- 替换为:
\t
- 选中环绕
- 检查正则表达式
- 全部替换
解释:
\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
结果:
我有一个包含数百行的文本文件,我想将每行的特定结束块(可变的开始长度,"AS" 之后的所有内容)移动到特定的列位置。
这是我需要经常做的任务。我现在在 Notepad++ 中使用 find-n-replace 操作进行这种特殊格式化,但最后的步骤是繁琐的手动标签行。
原始模式如下(这是在通过 find-n-replace 操作进行一些初始格式化操作之后):
red.id AS red_identifier
red.c 作为 red_color
mbr.red_mbr 作为 red_member
stat.red_stat AS red_status
我希望格式如下所示,所有 "AS ..." 部分从 x 列开始:
red.id AS red_identifier
red.c AS red_color
mbr.red_mbr AS red_member
stat.red_stat AS red_status
非常感谢任何帮助!这可以在 Notepadd++ 中处理吗? Python(我只知道语言)脚本可取吗?
你可以用 4 个独立的基于正则表达式的 find/replace:
替换取决于实现所需 column x
对齐所需的前导空格数。
匹配的正则表达式:
替换后:
因此每个组的正则表达式和替换为:
查找内容:(?:(AS red_[i].+))
// 捕获 AS red_identifier
文本
替换为:(7 个前导空格)$1 // $1 被捕获的文本替换
查找内容:(?:(AS red_[c].+))
// 捕获 AS red_color
文本
替换为:(8 个前导空格)$1
查找内容:(?:(AS red_[m].+))
// 捕获 AS red_member
文本
替换为:(2 个前导空格)$1
这 3 个替换将与最后一行 AS red_status
对齐 AS
。您当然可以调整间距,但示例中最后一行的正则表达式为:
查找内容:(?:(AS red_[s].+))
// 捕获 AS red_status
文本
替换为:(n 个前导空格)$1 // n
这里可以是您可能需要的任意数量的空格。
如果您将间距添加到第 4 行,则此处使用的间距量需要添加到前 3 行以保持所需的 column x
对齐。
例如,如果您希望在最后一行的 AS 之前有 4 个额外的空格,则:
- 第一行匹配需要在 $1 之前有 11 个前导空格
- 第 2 行匹配在 $1 之前需要 12 个前导空格
- 第 3 行匹配在 $1 之前需要 6 个前导空格
... 使 column x
与 AS 对齐。
您可以分两步完成此操作:
- 修改tab宽度为指定宽度,这里我用的是25
- Ctrl+H
- 查找内容:
\h+(?=AS\b)
- 替换为:
\t
- 选中环绕
- 检查正则表达式
- 全部替换
解释:
\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
结果: