正则表达式匹配,用于删除数字中的可变长度序列

时间:2019-05-02 21:43:17

标签: python regex numpy

我有一个numpy的整数数组,看起来像是X000Y000。 X和Y的长度可以为1、2或3,并且可以包含0。我想将数组中的每个元素都转换为X。我觉得可以使用一个正则表达式来解决这个问题,但无法找出要使用的正则表达式,也不知道如何将其应用于整个数组。

例如:14000010000应该变成140。

1 个答案:

答案 0 :(得分:1)

我假设XY不能以0开头。 [1-9]\d{0,2}匹配一个以0开头的1到3位数字。

因此提取XY的正则表达式应为:

^([1-9]\d{0,2})000([1-9]\d{0,2})000$

然后,您可以使用re.sub()删除XY之间的零。

regex = re.compile(r'^([1-9]\d{0,2})000([1-9]\d{0,2})000$');
i = 14000010000
istr = str(i)
new_i = int(regex.sub(r'\1\2', istr)

您可以将此映射到您的numpy数组上

regex = re.compile(r'^([1-9]\d{0,2})000([1-9]\d{0,2})000$');
new_array = np.fromiter((int(regex.sub(r'\1\2', str(x)) for x in array), array.dtype)

有关在numpy数组上映射函数的各种方式,请参见Most efficient way to map function over numpy array