2013-02-21 172 views
1

我有蟒蛇巨大的列表,看起來像這樣:正則表達式 - 修改Python列表

('foo','bar','foo/bar','foo1','bar/1') 

上面的每個值演示了各種角色的列表中包含 - aplhanumeric加斜槓。我需要一種方法來把這個列表插入元組的列表,像這樣:

(('foo','foo'),('bar','bar'),('foo/bar','foo/bar'),('foo1','foo1'),('bar/1','bar/1')) 

那麼,什麼更好的方式來做到這一點比正則表達式搜索和替換,對不對? (如我錯了請糾正我)。

因此,我試圖匹配除逗號引號之間的任何東西,因爲在技術上,他們也引號之間。我使用前視和後視來匹配任何東西:

(?<=')(.*?)(?=') 

但是,只匹配引號和逗號內的值。我需要的是匹配除逗號之外的值加上引號,並使用替換正則表達式使列表看起來像上面的元組。

我不能手工做這件事,因爲名單是巨大的。

有什麼想法?

+1

你說你有一個巨大的'list',然後你向我們展示一個'tuple',然後你用一個正則表達式來解析它,這意味着它是一個'str'。這是什麼? – abarnert 2013-02-21 20:07:35

+0

好吧,讓我清除它。這是你看到的。我需要將第一個轉換爲第二個。它是'str'的一個'list',但是我需要將它轉換爲'str'的​​'tuple'' – 2013-02-21 20:08:48

+0

另外,它似乎是所有你想要做的事情:'元組的元素((元素,元素) huge_list)'。或者,更簡單:'元組(zip(huge_list,huge_list))'。我錯過了什麼嗎? – abarnert 2013-02-21 20:08:54

回答

2

OK,你有一個字符串的巨大list。您需要一個tuple,其中list的每個元素都有一對(element, element)

這正是zip所做的,只不過它在2.x中返回這樣的對的list,或者在3.x中返回一個迭代器。無論哪種方式,只需撥打tuple即可將其轉換爲tuple。因此:

tuple(zip(huge_list, huge_list)) 

更一般地說,如果要按元素轉換序列元素,則可以使用理解或生成器表達式。沒有「元組理解」,但只是將生成器表達式傳遞給tuple函數會執行同樣的操作。所以:

tuple((element, element) for element in huge_list) 

或者,如果你想(s[0], s[1:])tuple對代替(s, s)對:

tuple((element[0], element[1:]) for element in huge_list) 

等。

同時,我想不出任何將對象轉換爲其repr以對其運行正則表達式轉換並重新解析它的情況在Python中是一個好主意。這不僅僅是一個"Now they have two problems"問題;解析結果字符串(並且,即使你不關心安全性,也不知道如何處理其中的任何事情,比起你開始的任何事情都更加困難。所以,如果你發現自己想要完成這項工作,請退後一步。