【问题标题】:In python 3.x how do I remove a sub-string from a string in a list?在 python 3.x 中,如何从列表中的字符串中删除子字符串?
【发布时间】:2019-04-11 15:11:56
【问题描述】:

我正在编写一个程序,它可以读取有关系统的各种信息,并将其分类为更简洁、更美观的格式。必要的信息会在读取时添加到列表中,但我需要从某些列表元素中删除一些数据。

例如,我的列表将包含一个如下所示的元素:

['Software: 12.01 (built 2016-10-28 21:51:37+01:00)']

如何删除 12.01(或其他任意序列)之后的所有内容?

编辑:我想通了

with open('filename.txt') as f: 
    software_list = [line.rstrip('\n') for line in f if 'Software:' in line]
for i in software_list:
    final_soft_list.append(i.split('(')[0])
print(final_soft_list)

输出给了我:[软件:12.01]

【问题讨论】:

  • 您不能在“一些其他任意序列”之后删除。您必须使用例如正则表达式来描述序列。
  • 另外,请包括您尝试过的内容
  • myString[0].split('12.01')[0] 之类的东西可以完成你的工作。试着调整一下。
  • @DYZ 我说的是任意的,因为版本(12.01)之后的信息会因系统而异。此外,我正在尝试使用其他读取的不同字符串来执行此操作。我试图让它在某个点之后删除任何数据,并且由于数据会因系统而异,我需要某种通配符或表示“只保留这部分”的方式

标签: string python-3.x list substring


【解决方案1】:

您可以使用re 模块。

假设您要替换列表中所有元素的 substr,请创建如下函数:

import re

def remove_substr(input_list, substr):
    out_list = []
    for element in input_list:
        out_list.append(re.sub(substr,'',element))
    return out_list

在您发布的示例上调用函数:

In [1325]: l
Out[1325]: ['Software: 12.01 (built 2016-10-28 21:51:37+01:00)']

In [1330]: out_list = remove_substr(l, '12.01')

In [1331]: out_list
Out[1331]: ['Software:  (built 2016-10-28 21:51:37+01:00)']

如果你想在模式之后删除任何东西,你可以这样做:

In [1354]: def remove_substr(input_list, substr):
      ...:         out_list = []
      ...:         for element in input_list:
      ...:             out_list.append(element.split(substr)[0])
      ...:         return out_list
      ...:     

In [1355]: 

In [1355]: remove_substr(l,'12.01')
Out[1355]: ['Software: ']

如果这有帮助,请告诉我。

【讨论】:

  • 如果我想删除 (built 2016-10-28 21:51:37+01:00) 部分怎么办?我遇到的问题是这将针对一堆不同的系统运行,因此构建数据会有所不同。如何使用某种通配符删除版本之后的任何数据(在本例中为 12.01)?
  • 检查我更新的答案。我添加了另一个功能。如果这是您想要的,请告诉我。
  • 我使用了split()方法但不需要使用re。感谢您的帮助
  • @JakeMiller 既然答案对你有帮助,请也给它投票。谢谢。
猜你喜欢
  • 1970-01-01
  • 2020-05-01
  • 2021-06-24
  • 2020-04-05
  • 2015-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多