我對形式的字符串:使用正則表達式從字符串中獲取子
integer
,integer
,以逗號分隔的字符串列表,整數
例如:
"0, 0, ['REFERENCED', 'UPTODATE', 'LRU'], 1"
我想返回這個子字符串['REFERENCED', 'UPTODATE', 'LRU']
我想用split(", ")
,然後加入到一起,但它會很複雜。如何用正則表達式來做到這一點?
我對形式的字符串:使用正則表達式從字符串中獲取子
integer
,integer
,以逗號分隔的字符串列表,整數
例如:
"0, 0, ['REFERENCED', 'UPTODATE', 'LRU'], 1"
我想返回這個子字符串['REFERENCED', 'UPTODATE', 'LRU']
我想用split(", ")
,然後加入到一起,但它會很複雜。如何用正則表達式來做到這一點?
只寫一個正則表達式來捕獲由一個[
的,任何字符,然後一個]
一組。
>>> import re
>>> s = "0, 0, ['REFERENCED', 'UPTODATE', 'LRU'], 1"
>>> re.search(r'(\[.*\])', s).group(1)
"['REFERENCED', 'UPTODATE', 'LRU']"
如果輸入真的是這口井的結構,你可以使用ast.literal_eval
:
>>> import ast
>>> ast.literal_eval(s)[2]
['REFERENCED', 'UPTODATE', 'LRU']
要安全評估包含蟒蛇文字串並拉動第三元件從tuple
的。
如果你只是在尋找一種表達,你可以試試:
"\[([\w\d,']+)\]"
沒有必要使用正則表達式。將括號中的字符串包裝成一個列表的字符串表示,然後使用ast.literal_eval
將其轉換爲實際列表。
import ast
s = "0, 0, ['REFERENCED', 'UPTODATE', 'LRU'], 1"
outer_list = ast.literal_eval('[' + s + ']')
inner_list = outer_list[2]
print(inner_list)
你可能會被使用eval
,而不是ast.literal_eval
。抵制誘惑。使用eval
是不安全的,因爲它會評估任何Python表達式,即使它包含討厭的東西,例如從硬盤中刪除文件的說明。您可以使用ast.literal_eval
,因爲它only parses strings, numbers, tuples, lists, dicts, booleans, and None
。
s = "0, 0, ['REFERENCED', 'UPTODATE', 'LRU'], 1"
start = s.find("[")
end = s.rfind("]")
print(s[start:end+1])
['REFERENCED', 'UPTODATE', 'LRU']
該輸入的語法是什麼?它可能與Python源代碼兼容?你可以使用['ast.literal_eval'](https://docs.python.org/2/library/ast.html#ast.literal_eval)嗎? – 2014-11-24 22:34:54
'內部'字符串是否可以包含'['或']'字符? – 2014-11-24 22:36:30
@TomDalton號這是一個很好的問題。我應該提到這一點 – Keeto 2014-11-24 22:39:26