现有一个文件,用VSCode打开,发现里面:
显示出了NAK这种特殊不可见字符:
(注:
之前一直是开启显示控制字符:
所以此处才能看到这些特殊的,不可见的,控制字符的)
NAK
此处需要:
搞清楚NAK的含义
以及:
替换掉:
NAK\d+_\d+NAK
为空
之前自己整理过,
所以去找:
crifan 不可见字符
ASCII字符集中的功能/控制字符 Function/Control Code/Character in ASCII v2011-10-12 – 在路上
十 进制 | 十六 进制 | 控制 字符 | 转义 字符* | 说明 | Ctrl + 下列字母 * |
21 | 15 | NAK | Negative Acknowledgement(拒绝接收/无响应) | U |
3.11. Notepad++支持插入特殊字符 – – 【crifan推荐】轻量级文本编辑器,Notepad最佳替代品:Notepad++
21是NAK=Negative Acknowledgement(拒绝接收/无响应)
所以接着就是去搞清楚:
VSCode中的正则,如何输入表达
ASCII中特殊的不可见字符NAK
或者说 unicode字符
VSCode 正则 特殊字符
继续参考之前找到的:
Basic Editing in Visual Studio Code
->
BurntSushi/ripgrep: ripgrep recursively searches directories for a regex pattern
->
去看看,如何写unicode字符
好像可以参考:
<code>\x7F hex character code (exactly two digits) </code>
去写hex 16进制值,试试
ASCII的NAK=10进制是12=16进制是0x15
结果无效:
再去参考:
<code>\x{10FFFF} any hex character code corresponding to a Unicode code point </code>
试试unicode的code point
不过先去查查NAK的unicode的code point
unicode code point
unicode code point NAK
List of Unicode characters – Wikipedia
“
U+0015 | 21 | NAK |
”
结果:
<code>\x{0015}\d+_\d+ </code>
也不行,匹配不到:
VSCode regex special char
Not able to find special characters like \n, \r, \t · Issue #6186 · Microsoft/vscode
can’t search with unicode regular expression · Issue #39404 · Microsoft/vscode
support `\u` and `\u{…}` syntax · Issue #424 · rust-lang/regex
<code>\u0015 \u15 </code>
都不行。
VSCode regex unicode
Dealing with invalid js characters in VS Code – Code Buckets
我这里试了:
<code>\u0015 \u15 </code>
还是不行啊
Remove backspace control character – Visual Studio Marketplace
去试试
<code>[\u0015] [\u15] </code>
都可以的,能找到字符的:
然后去用:
<code>^[\u0015]\d+_\d+[\u0015]$ </code>
去掉这些有问题的单词
然后再去顺带把多余的空行去掉
<code>\n\n+ \n </code>
而此处:
<code>\u0015 </code>
之所以没有生效。
后来经过自己的细心和观察和猜测:
Dealing with invalid js characters in VS Code – Code Buckets
帖子2017年的,感觉是:
\uxxxx
VSCode应该是2017年就知道了
而此处
http://codebuckets.com/2017/03/10/dealing-with-invalid-js-characters-in-vs-code/
可以
-》
而对方是js代码
-〉但是我这里不可以。
-》难道是\uxxxx只有在js代码中的才有效?
-〉之所以这么测试是因为看到了:
can’t search with unicode regular expression · Issue #39404 · Microsoft/vscode
提到了:
“ one search engine uses the JavaScript regular expression syntax (albeit without the ‘u’ unicode flag),
the other is based on ripgrep which uses Rust regular expression syntax.”
即:
VSCode中用了两套正则的库:
JS的正则表达式的库
ripgrep:
内部是基于Rust正则表达式的库
也就是我们之前找到的那个文档:regex – Rust
去试了试:
把其中部分内容,拷贝出来,设置代码语法是js,然后再去试试:\u0015,还真的可以:
-》证明了我的猜测是对的。
【后记】
后来重新试了,csv文件中:
<code>\u0015 </code>
是生效的:
<code>\u0015\d+_\d+\u0015 </code>
替换为:
再去:
<code>\n\n+ \n </code>
把文件从39M变成3.4M了:
【总结】
VSCode中,如果使用查找(和替换的话),其中用到了正则的话
-〉在搜索中,选中了那个:.* 的图标
-》
按照之前说法,好像有两套正则:
JS的正则
Regular Expressions – JavaScript | MDN
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
-》unicode(和hex的16进制)写法是:
\xhh
Matches the character with the code hh (two hexadecimal digits)
\uhhhh
Matches the character with the code hhhh (four hexadecimal digits).
\u{hhhh}
(only when u flag is set) Matches the character with the Unicode value hhhh (hexadecimal digits).
基于Rust的ripgrep
调用的是:
regex – Rust
-》unicode(和hex的16进制)的写法是:
\x7F
hex character code (exactly two digits)
\x{10FFFF}
any hex character code corresponding to a Unicode code point
\u007F
hex character code (exactly four digits)
\u{7F}
any hex character code corresponding to a Unicode code point
\U0000007F
hex character code (exactly eight digits)
\U{7F}
any hex character code corresponding to a Unicode code point
-》不过不用操心,此处
VSCode版本是最新的:1.24.1
对于unicode,都支持:
<code>\u0015 </code>
的写法,即可找到NAK这个特殊字符了。
另外:新版Rust的unicode支持更完整:
之前0.25的旧版本的Rust:
是:
<code>\x7F hex character code (exactly two digits) \x{10FFFF} any hex character code corresponding to a Unicode code point </code>
而新版本1.0
是:
<code>\x7F hex character code (exactly two digits) \x{10FFFF} any hex character code corresponding to a Unicode code point \u007F hex character code (exactly four digits) \u{7F} any hex character code corresponding to a Unicode code point \U0000007F hex character code (exactly eight digits) \U{7F} any hex character code corresponding to a Unicode code point </code>
转载请注明:在路上 » 【已解决】替换掉VSCode中显示出的特殊字符:NAK