![](/img/trans.png)
[英]Extract text available between two keywords and store that text into a list in 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.