【问题标题】:RegEx matching for removing a sequence of variable length in a number用于删除数字中可变长度序列的正则表达式匹配
【发布时间】:2019-09-21 11:01:32
【问题描述】:

我有一个看起来像 X000Y000 的 numpy 整数数组。 X 和 Y 的长度可以是 1、2 或 3,并且可能包含 0。我想将数组中的每个元素都转换为 X。我觉得可以为此使用正则表达式,但无法找到一个好的使用方法,或者如何将其应用于整个数组。

例如:14000010000 应该变成 140。

【问题讨论】:

  • 你怎么知道是 140 而不是 14?
  • 因为 X 后面正好有三个 0,Y 后面正好有三个 0,应该删除。
  • 为什么不变成14010
  • X140Y10

标签: python regex numpy


【解决方案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)

请参阅Most efficient way to map function over numpy array,了解将函数映射到 numpy 数组的各种方法。

【讨论】:

  • 太棒了,正是我想要的。
  • @user3483203 是的,我误读了上面链接的问题的答案。
猜你喜欢
  • 2011-11-16
  • 1970-01-01
  • 2011-06-17
  • 2018-10-22
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 2021-01-17
  • 1970-01-01
相关资源
最近更新 更多