如何在 Notepad++ 中按数字顺序对行进行排序?

如何在 Notepad++ 中按数字顺序对行进行排序?

使用带有 TextFX 的 Notepad++ v6.6.8。

如何按数字顺序而不是字母数字顺序对行进行排序?

也就是说我想要按如下方式排序:

1
2
10
11
15
20

不是:

1
10
11
15
2
20

答案1

现在这很容易实现(至少在 Notepad++ 7.5.9 中):

使用菜单项: Edit -> Line Operations -> Sort Lines As Integers Ascending

(请注意,如果您不选择任何文本,它将对整个文件进行排序,如果您选择文本,它会将排序限制在所选文本。)

答案2

我不知道您的文件是什么样子的,但我会使用正则表达式在每个数字前添加空格或零,使它们的长度相同(例如 2 变成 002)。然后它们将正确排序,然后您可以使用另一个替换来删除前面的空格/零。

这些是步骤(最多 10 个字符)

查找:^ 替换:0000000000

查找:\d*(\d{10}) 替换:\1

种类

查找:^0* 替换:

它的工作原理是在数字前添加 10 个零,尽管这可能太多了。第二次替换取数字的最后 10 位数字,使所有内容恢复到相同的长度,从而得到诸如 0000000839、0000000003 等数字。这些数字将按照您希望的顺序排序。排序后,最后一个表达式将删除所有前导零,这样您就可以恢复原始数字。

如果您需要更长的数字,只需在第一次替换中添加更多零,并在第二次替换中相应地增加 10。如果您要更频繁地执行此操作,则可以按照以下步骤录制宏。

答案3

我还没有尝试过,但有一个插件声称可以做到这一点(只要行以数字开头)。以下是链接:http://www.scout-soft.com/linesort/

更新 好的,该插件现在显然已经消失了。也许它不适用于较新的 NP++ 版本。这是我在插件管理器中看到的另一个插件,所以它至少更常见:http://william.famille-blum.org/blog/index.php?entry=entry110123-113226

我刚刚在 6.6.9 上尝试过,虽然有点尴尬(不要忘记点击对话框上的添加按钮)但效果很好。

答案4

选择全部并将其作为文本复制到 Excel 或其他电子表格程序,使用自定义排序。每行应粘贴为单个单元格,A1、B1 等。只需将字段设置为数字而不是文本。这可以通过设置单元格格式或使用 TEXT 函数来完成。粘贴回 notepad++。

在更复杂的情况下,OP 的文本与数字混合在一起(例如,“1 第一行”、“12 第十二行”),我们可以创建一个排序列来组织列表。由于数字后面有一个空格,我们可以使用 =LEFT(A1,FIND(" ",A1,1)) 找到该空格以创建仅包含数字的列。将函数扩展到整个列后,我们可以根据排序列顺序(即数字顺序)对两列进行排序,然后以正确的顺序复制回第一列。提取行号的确切公式将取决于行格式,但上述命令在大多数情况下只需稍加修改即可使用,否则 stack exchange 会有更多类似公式的示例。

相关内容