增加空格/拆分字符对

6
如何在每对字符之间添加空格/分隔符。
eg 0x5C8934A3   -->  0x 5C 89 34 A3

我可以使用宏来完成,但由于字符串的长度太长,手动设置需要花费太长时间。

我知道如何进行查找,但无法正确地执行替换。请指导我如何操作。

[0][x][0-9A-F]+    
match 
0x5C8934A3
3个回答

27

Notepad++的正则表达式功能非常有限,所以您需要使用类似于以下内容的工具:

搜索:

(..)

替换为

\1 

(注意在\1后面有一个空格!)

(..)表示查找两个字符并存储它们

\1获取第一个捕获组中存储的字符

这种简单解决方案的前提是只有这种字符串且没有其他内容。然后它会在单词后面添加一个不需要的空格。如果不想要,可以在之后将其删除。


2

我这里没有安装Notepad++,但在我的编辑器中,你可以搜索\B(?=(?:[0-9A-F]{2})+\b)并将所有内容替换为一个空格。

解释:

该正则表达式的作用是匹配所有不在单词边界内的字符,后面跟着一串连续的两个十六进制数字,并且这个字符串必须出现在单词边界之前。将其替换为一个空格即可去除这些字符。
\B            # only match within words
(?=           # Assert that from the current position...
 (?:          # ...the following can be matched:
  [0-9A-F]{2} # a succession of two hexadecimal digits
 )+           # once or more,
 \b           # ending at a word boundary.
)             # End of lookahead

这是唯一对我有效的答案。 - David Klempfner

1

这个正则表达式将返回两个非换行符(\n)字符的组。

.{2}

如果您想匹配 \n,可以使用字符范围 [\s\S]

如果您希望明确匹配十六进制模式,可以使用...

^(0x)([\da-z]{2})+

(一定要使用i模式修饰符。)

您没有指定语言,但是您可以使用空格字符连接匹配项或使用$0进行替换(或者在JavaScript中保持整个匹配项的任何内容,例如$&)。


抱歉,我忘了提到我正在使用Notepad++正则表达式替换。 - david

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接