如何删除numpy数组python中的部分字符串元素

2fjabf4q  于 2022-12-13  发布在  Python
关注(0)|答案(3)|浏览(194)

我有一个大型数组,格式为

a = np.array([['#define', 'name_1', '(value1) /*comment 1*/'],
              ['#define', 'name_2', '(value2) /*comment 2*/'],
              ['#define', 'name_3', '(value3) /*comment 3*/'],
              ['#define', 'name_4', '(value4) /*comment 4*/']])

第3列的字符串有注解,我只需要保留括号内的“value”部分,即(0x123)。输出如下所示

[['#define', 'name_1', '(value1)'],
              ['#define', 'name_2', '(value2)'],
              ['#define', 'name_3', '(value3)'],
              ['#define', 'name_4', '(value4)']]

我会很感激任何帮助,谢谢。

wwodge7n

wwodge7n1#

选项1:使用.split()拆分/*,仅保留第一部分value

for i in range(len(a)):
    a[i][2] = a[i][2].split("/*")[0].strip()

选项2:使用re.sub()\**\包围的注解部分替换为""

import re
for i in range(len(a)):
    a[i][2] = re.sub(r"/\*.*\*/", "", a[i][2]).strip()

输出:

array([['#define', 'name_1', '(value1)'],
       ['#define', 'name_2', '(value2)'],
       ['#define', 'name_3', '(value3)'],
       ['#define', 'name_4', '(value4)']], dtype='<U22')
eaf3rand

eaf3rand2#

下面是一个向量化的单行程序,它没有使用任何for循环或嵌套NumPy操作。
第一个
从技术上讲,对于您的示例,由于其他字符串的长度小于8,因此可以只使用a.astype('<U8'),但在应用于整个数组时要小心。
第一次
但请注意,这将对所有其他单元格应用长度为8的限制。

woobm2wo

woobm2wo3#

您应该使用正则表达式从'(value1) /*comment 1*/'中提取(value)
要使用regex获取(value),您应该导入python中的re库。

import re
import numpy as np 

pattern = re.compile(r'\((.*?)\)')

a = np.array([['#define', 'name_1', '(val1) /*comment 1*/'],
              ['#define', 'name_2', '(val2) /*comment 2*/'],
              ['#define', 'name_3', '(val3) /*comment 3*/'],
              ['#define', 'name_4', '(val4) /*comment 4*/']])

for row in a:
    new = re.match(pattern, row[2]).group(1)
    row[2] = f'({new})'

print(a)

输出功率

[['#define' 'name_1' '(val1)']
 ['#define' 'name_2' '(val2)']
 ['#define' 'name_3' '(val3)']
 ['#define' 'name_4' '(val4)']]

相关问题