regex 在“0x”后添加前导零,使列表中的所有数字长度相同(8位数)

kb5ga3dv  于 2022-12-01  发布在  其他
关注(0)|答案(1)|浏览(113)

我有一个很长数据对列表,如下所示:

{0x1023350, 0x3014},
{0x1023954, 0x3007},
{0x1023960, 0x10F},
{0x102396C, 0x2FF},
{0x10219, 0x16},

这里的数字可以是2位到8位,但我的要求是用前导零填充它们,以便在最终输出中所有数字的长度都是8位。

{0x01023350, 0x00003014},
{0x01023954, 0x00003007},
{0x01023960, 0x0000010F},
{0x0102396C, 0x000002FF},
{0x00010219, 0x00000016},

我如何使用正则表达式(我正在使用记事本++,但如果我不能在记事本++中执行此操作,我也可以使用其他工具)
我还没有那么流利的正则表达式来尝试任何解决方案。

68bkxrlz

68bkxrlz1#

分两步完成:

步骤1 -添加多余的左填充

搜索:0x
替换:0x00000000

第2步-完全匹配多余部分并将其删除

搜索:0x\d+(?=[\dA-F]{8}[,}])
替换:0x
正则表达式:

  • \d+表示一个或多个数字
  • (?=[\dA-F]{8}[,}])表示后跟8个十六进制字符,然后是逗号或}

一些python代码演示:

import re

str = """{0x1023350, 0x3014},
{0x1023954, 0x3007},
{0x1023960, 0x10F},
{0x102396C, 0x2FF},
{0x10219, 0x16},
"""
str = str.replace("0x", "0x00000000")
str = re.sub("0x\d+(?=[\dA-F]{8}[,}])", "0x", str)
print(str)

输出量:

{0x01023350, 0x00003014},
{0x01023954, 0x00003007},
{0x01023960, 0x0000010F},
{0x0102396C, 0x000002FF},
{0x00010219, 0x00000016},

相关问题