當將資料集堆疊在一個相當大的檔案中時,我需要從一個小錯誤(60k 超過 2M 個專案)中進行補救:不知何故 2 個連續的記錄被合并在一起。我只給你看幾個例子:
list1= ['^ZZ.LAAA.IS','ELJ.ISELK.IS','NID.ISNIE.IS','KMH.DUKNC.DU']
list2= ['.LA','.LK','.IS','.DU']
我需要,我正在考慮拆分 list1 的每條記錄,只是對應于 list2 的每個最終記錄的結尾,當它與要在 list1 中拆分的時刻的字串重疊時。串列 1 中的記錄具有不同的長度,而串列 2 中的記錄可能需要 2-3 個字符長。
示例:list1 的第二條記錄:ELJ.ISELK.IS。當我們在中間重疊 list2( .IS) 的第三條記錄時,我們可以將它拆分為我需要的 2 條新記錄:ELJ.IS和ELK.IS
我打算使用正則運算式..類似于:
for i in list1:
for j in list2:
new1 = re.sub(r'. (j)','',i)
new2 = \1
但我無法正確組合陳述句...可能存在內置函式或其他方式來完成任務..?
uj5u.com熱心網友回復:
以下re.findall方法似乎在這里作業:
list1 = ['ZZ.LAAA.IS','ELJ.ISELK.IS','NID.ISNIE.IS','KMH.DUKNC.DU']
list2 = ['.LA','.LK','.IS','.DU']
regex = r'^(.*?(?:' r'|'.join([re.escape(x) for x in list2]) r'))(.*)$'
for item in list1:
parts = re.findall(regex, item)
print(parts)
這列印:
[('ZZ.LA', 'AA.IS')]
[('ELJ.IS', 'ELK.IS')]
[('NID.IS', 'NIE.IS')]
[('KMH.DU', 'KNC.DU')]
需要明確的是,這里是使用的正則運算式:
^
(.*? match and capture in group 1 until reaching
(?:\.LA|\.LK|\.IS|\.DU) the nearest .LA etc.
)
(.*) match and capture in group 2
$
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/432911.html
上一篇:正則運算式生成動態sql
