我有一堆变量(大约80个),可以将它们复制并粘贴到编辑器中(从另一个* .txt文件中获取这些变量)。在这之后,看起来有点混乱
ka15 1-2 tre15 3-4 hsha15 5
juso15 6
kl15 7-9 kkjs15 10
但是我想对它进行结构化,以更好地了解代码内部的情况。我还必须从每个变量中删除15。理想情况下,我会得到
ka 1-2 tre 3-4 hsha 5
juso 6 kl 7-9 kkjs 10
有一个聪明的方法来实现这一目标吗?我正在使用 SAS企业指南编辑器和 VSCode ,但是找不到方法。例如,当我找到并替换15个时,希望可以用一个选项卡替换它,但是在两个编辑器中都找不到该选项。有什么想法可以自动化吗?或者至少不手工做任何事情?
答案 0 :(得分:1)
我找到了解决您问题的解决方案,如果有人找到更好的解决方案,我会删除我的,但在这里¯\_(ツ)_/¯
:
1)复制文件的所有内容(例如我复制了两次):
ka15 1-2 tre15 3-4 hsha15 5
juso15 6
kl15 7-9 kkjs15 10
ka15 1-2 tre15 3-4 hsha15 5
juso15 6
kl15 7-9 kkjs15 10
2) Ctrl + H ,并使用 Ctrl将所有15
替换为空(保留为空) + Alt + 输入。
3) Ctrl + F 并在搜索框中打开正则表达式。现在,键入\s
以选择空白,它应该在每个单词之后选择一个空白。现在,使用 Alt + Enter 选择所有出现的位置,然后按 Backspace ,然后按 Enter 。这样会删除单词之间的空格,并将一个单词放在一行代码中,如下所示:
ka
1-2
tre
3-4
hsha
...
按 Escape 可以删除多个光标。
4)再次按 Ctrl + F ,然后在搜索框中键入$
符号。这将选择每行的结尾。再次按 Alt + Enter 选择所有出现的位置,然后按 Space 5-8次。但是请注意,光标未正确对齐。按 Escape 删除多个光标。
5)将光标放在第一个单词的几个空格处。然后,按住 Ctrl + Alt + ↓在第一个光标下面添加多个光标。然后,按 Shift + End 选择每行末尾的所有空白,然后按 Delete 删除它。再次按 Delete 将所有单词排成一行,并用n
空格隔开。
6)不幸的是,我找不到最后一部分的正则表达式。光标应放置在每个第6个变量之后,但我通过将光标放置在每个第7个单词旁边并按 Enter 来解决。
我通常不会像这样输入太多,但我喜欢您遇到的问题。对我来说,这比难题还多。
答案 1 :(得分:1)
我想出了3个可满足您需要的正则表达式。为了依次运行它们,您将需要regreplace extension或类似名称。
这进入您的设置:
"regreplace.on-save": false,
"regreplace.commands": [
{
"name": "Transform Data to Table Format, step 1",
"regexp": "([a-zA-Z]+|[\\d-]+)(15)?(\\s[\r\n]?)*",
"replace": "$1 \n",
"priority": 1,
},
{
"name": "Transform Data to Table Format, step 2",
"regexp":
"(([\\S-] {6})(.*))|(([\\S-]{2} {5})(.*))|(([\\S-]{3} {4})(.*))|(([\\S-]{4} {3})(.*))",
"replace": "$2$5$8$11",
"priority": 2,
},
{
"name": "Transform Data to Table Format, step 3",
"regexp":
"((.*)\n)((.*)\n)((.*)\n)((.*)\n)((.*)\n)((.*?)(\\s*\\n))",
"replace": "$2$4$6$8$10$12\n",
"priority": 3,
}
],
它为三个正则表达式步骤中的每个步骤创建一个规则。通过运行regreplace.regreplace
命令可以依次运行所有三个规则。这是一个演示:
正则表达式旨在与最长不超过4个字符的数据项配合使用,但可以很容易地修改较长的数据项。
在第1步中,将替换规则中\ n前面的空格数增加到16个左右。
在步骤2中,您将必须感知诸如(([\\S-]{4} {3})(.*)
之类的正则表达式组的模式才能对其进行修改。一个13个字符长的变量可能需要(([\\S-]{13} {3})(.*)
作为最后一个组,([\\S-] {15})(.*))
作为序列中的第一个组,依此类推,以便按顺序修改所有其他组。让我知道您是否需要帮助。
第3步无需修改,除非您想更改每行显示多少个数据项-现在每行有3个变量及其数据,因此该正则表达式中有6个组。
在运行命令之前,任何一行中有多少个数据值对都没有关系。
[需要注意的两点:在数据开始之前不应有任何空行,尽管如有必要,您可以将正则表达式作为删除空行的第一条规则。数据内或末尾的空行不是问题。
第二,该扩展名不能仅在选定的文本上运行,因此您必须将数据放置在一个空文件的顶部以进行转换,然后将其复制到其他位置。]
还有一个replace rules extension,其作用类似于regreplace,但根据文档只能在一个选择上运行,但由于某些未知原因,它对我不起作用。但是它确实具有更好的界面-所有正则表达式都可以纳入一条规则,然后可以独立运行。