天天看點

盤點一個Python清單(元素多樣)處理的實戰題目(使用正規表達式也可以實作)

大家好,我是Python進階者。

一、前言

前幾天在Python白銀交流群【凡人不煩人】問了一個Python清單處理的問題,提問截圖如下:

盤點一個Python清單(元素多樣)處理的實戰題目(使用正規表達式也可以實作)

下面是他的部分資料:

lst = ['(問答題)(2) 假設鍍鋅鋼管', 'http://admintk.sc.zzstep.com/UpLoadImage/2019-10-10/a84f340e-6c67-42b1-8eae-3dc142818492.png)15暗配的清單工程量為50m,其餘條件不變,依據上述相關定額計算分析鍍鋅鋼管', 'http://admintk.sc.zzstep.com/UpLoadImage/2019-10-10/a84f340e-6c67-42b1-8eae-3dc142818492.png)15暗配項目的綜合單價,并填入“工程量清單綜合單價分析表”中。']      

二、實作過程

這裡【dcpeng】給了一份代碼,如下所示:

lst = [元素清單]
# print(len(lst))
new_lst = [lst[0]]
for item in lst[1:]:
    new_item = item.split(')')
    new_lst.extend([new_item[0], new_item[1]])
print(len(new_lst))
print(new_lst)      

可以得到預期的結果:

盤點一個Python清單(元素多樣)處理的實戰題目(使用正規表達式也可以實作)

後來【甯同學】也給了一個代碼,如下圖所示:

盤點一個Python清單(元素多樣)處理的實戰題目(使用正規表達式也可以實作)

代碼很秀,歎為觀止!

盤點一個Python清單(元素多樣)處理的實戰題目(使用正規表達式也可以實作)

後來他自己又遇到了一個新需求,如下圖所示:

盤點一個Python清單(元素多樣)處理的實戰題目(使用正規表達式也可以實作)

看上去還是挺複雜的,用上面的代碼已經不能滿足了,後來他自己提供了一份代碼,如下圖所示:

l1 = sum([*map((lambda x: x.split(')') if 'png)' in x else [x]), lists)], [])
l1 = [x for x in l1 if x != '']
l2 = []
nums = []
for j, item in enumerate(l1):
    if 'png' in item:
        if item[0] != '!':
            b = ' '.join(l1[j - 1:j + 1]).split('![](')
            nums.append(j)
        else:
            b = item.split('![](')
            b = [x for x in b if x != '']
        l2.extend(b)
    else:
        l2.append(item)
lists = [l2[j] for j in range(len(l2)) if j+1 not in nums]
      

相當于方法一和方法二的結合版本,總算搞定了。

盤點一個Python清單(元素多樣)處理的實戰題目(使用正規表達式也可以實作)

後來他發了源碼之後,【瑜亮老師】給了一份代碼,使用正規表達式很快搞定,代碼如下:

import re
data = '你上面發的這個字元串'
temp = re.findall(r'>(.*?)<|src="(.*?)"', data)
result = [i.replace('\u3000', ' ') for j in temp for i in j if i != '']
print(result)
      

【瑜亮老師】的正規表達式使用還是6啊!

盤點一個Python清單(元素多樣)處理的實戰題目(使用正規表達式也可以實作)

不過他後面還陸陸續續發不同的源碼出來,每次發一個需求,就要改一次代碼,讓人也難頂。

盤點一個Python清單(元素多樣)處理的實戰題目(使用正規表達式也可以實作)

三、總結

大家好,我是Python進階者。這篇文章主要盤點了一個Python正規表達式處理的問題,文中針對該問題,給出了具體的解析和代碼實作,幫助粉絲順利解決了問題。

繼續閱讀