从数组中存储的字符串中删除单引号

时间:2018-07-02 14:49:57

标签: python regex

我编写了代码,将json响应附加到我正在执行的某些API工作的列表中,但是它在我想要的字母数字值周围存储了单引号。我想摆脱单引号。这是我到目前为止的内容:

i = 0
deviceID = []

while i < deviceCount:
    deviceID.append(devicesRanOn['resources'][i])
    deviceID[i] = re.sub('[\W_]', '', deviceID[i])
    i += 1
    if i >= deviceCount:
            break
if (deviceCount == 1):

    print ('Device ID: ', deviceID)

elif (deviceCount > 1):
    print ('Device IDs: ', deviceID)

所需的输入应如下所示:

input Device IDs:  
['14*************************00b29', '58*************************c3df4']    

Output: 
['14*************************00b29', '58*************************c3df4']

Desired Output: 
[14*************************00b29, 58*************************c3df4]

如您所见,我正在尝试使用RegEx过滤非字母数字并将其替换为空。它并没有给我一个错误,也没有在执行我要寻找的动作。有没有人建议如何解决此问题?

谢谢你, xOm3ga

1 个答案:

答案 0 :(得分:0)

您将无法使用默认打印。您将需要使用自己的方法来表示列表。但这很容易进行字符串格式化。

'[' + ', '.join(f'{id!s}' for id in ids) + ']'

f'{id:!s}是一个f字符串,它使用id方法格式化变量__str__。如果您使用的是3.6之前的版本而不使用f字符串,则也可以使用

'%s' % id
'{!s}'.format(id)

PS:

通过使用列表理解和自定义格式而不是正则表达式,可以大大简化代码。

ids = [device for device in devicesRanOn['resources'][:deviceCount]]

if deviceCount == 1:
    label = 'Device ID:'
elif deviceCount > 1:
    label = 'Device IDs:'

print(label, '[' + ', '.join(f'{id!s}' for id in ids) + ']')