1 前言
正则表达式是一种字符串匹配的模式,有一些规定语法。本文假设渎职已经了解一些基本的正则语法。
在此基础上,本文主要介绍如何利用 notepad++ 支持的正则语法实现在指定位置插入空格。
2 问题
我在处理网络数据包时,从中提取出一段十六进制格式的字符串,如下:
0026160000d2000c2950a9fc080045000029000040004011b904c0a80065c0a8000ac2f113e6001574a8010000000002000d0100007530
为了方便后续处理,我需要在每两个字符之间插入一个空格,效果如下:
00 26 16 00 00 d2 00 0c 29 50 a9 fc 08 00 45 00 00 29 00 00 40 00 40 11 b9 04 c0 a8 00 65 c0 a8 00 0a c2 f1 13 e6 00 15 74 a8 01 00 00 00 00 02 00 0d 01 00 00 75 30
3 实现方法
在这里我使用 notepad++ 来实现这个空格插入
notepad++ 支持使用正则查找和替换(尝试过 vscode,vscode 好像只支持正则查找,替换中并不识别正则)
- 首先匹配中两个字符
(\S{2})
(((\d)|[a-f]|[A-F]){2})
(((\d)|[a-f]|[A-F])((\d)|[a-f]|[A-F]) )
(((\d)|[a-f]|[A-F]){2})
- 在匹配中的两个字符后面追加空格
($1 ) //$1 表示第一个括号中匹中的字符,括号可有可无
温馨提示 : 匹配的正则表达式一定要加括号,如果不加括号,$1 只表示匹配中的两个字符中的第一个字符,即使我加上 $2 也总是不成功,可以自行尝试,成功了给我分享一下
//后来尝试发现,这样也行
([0-9]|[a-f]|[A-F])([0-9]|[a-f]|[A-F])
($1$2 )
- 总结
看来,括号一定要慎用,括号对应的是 $ 变量,当括号不包含括号时,括号从前往后数依次对应 $1 $2 $3 ... 当括号包含括号时,待补充......
4 结语
本人才疏学浅,若有不当之处,还请多多指教