簡體   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