繁体   English   中英

在Python列表中的字符之间提取文本

[英]Extract text between characters in a list in Python

在使用for循环遍历列表之后,为了仅提取一些值,我得到了:

['Dell Precision 380 (3.73 GHz, Pentium Exteme Edition 965)', '11.6']
['Dell Precision 380 (3.8 GHz, Pentium 4 processor 670)', '11.5']

我需要做的是在每行括号之间提取信息,并将其放入另一个列表中,但是我一直在努力寻找正确的代码。

我尝试了这里描述的方法: 如何找到两个特殊字符之间的字符串? ,但出现错误,因为该字符串在列表中。

我也看过Re的文档,但是我不确定在这种情况下如何应用它。

考虑到这是一个标准结构,您可以完全避免使用正则表达式,而只需执行以下操作:

让我们假设您已经提取了要处理的字符串:

s = 'Dell Precision 380 (3.73 GHz, Pentium Exteme Edition 965)'

您可以在第一个(上进行拆分,然后使用切片来删除不需要的内容:

>>> s.split('(')[1][:-1]
'3.73 GHz, Pentium Exteme Edition 965'

尽管以上内容确实具有始终落在括号之间的结构的依赖性,但是为了避免出现某些情况,您可以执行以下操作:

s.partition('(')[2][:-1]

如@JonClements的评论中所提供。

a = ['Dell Precision 380 (3.73 GHz, Pentium Exteme Edition 965)', '11.6']
b = a[0] # Get 'Dell Precision 380 (3.73 GHz, Pentium Exteme Edition 965)'
c = b[b.find('(') + 1: b.find(')')] # Get '3.73 GHz, Pentium Exteme Edition 965'

实现此目的的“更强大”的方法是使用正则表达式。 像这样:

import re
regex = re.compile("\((.*)\)")
details = list(for regex.findall(text)[0] for text in origin_list if regex.search(text))

您可以使用r'\\((.*)\\)来获取括号内的数据。 这很简单。

import re
data=[['Dell Precision 380 (3.73 GHz, Pentium Exteme Edition 965)', '11.6'],
['Dell Precision 380 (3.8 GHz, Pentium 4 processor 670)', '11.5']]
result=[re.match(r'\((.*)\)',x[0]).group(1) for x in data]
print result

但是,仅使用通配符有时可能会产生垃圾结果。 因此,最好应用更多的限制以获得完全匹配。 因此,如果您使用\\w.*\\((\\d+.\\d+\\s\\w.*,.*\\d+)\\)作为匹配模式,您将始终获得准确的数据。 因此,在这种情况下,相同的代码将变为

import re
data=[['Dell Precision 380 (3.73 GHz, Pentium Exteme Edition 965)', '11.6'],
['Dell Precision 380 (3.8 GHz, Pentium 4 processor 670)', '11.5']]
result=[re.match(r'\w.*\((\d+.\d+\s\w.*,.*\d+)\)',x[0]).group(1) for x in data]
print result

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM