我有一个字符串形式:
integer
,integer
,以逗号分隔的字符串列表,整数
例如:
"0, 0, ['REFERENCED', 'UPTODATE', 'LRU'], 1"
我想返回此子串['REFERENCED', 'UPTODATE', 'LRU']
我想过使用split(", ")
然后将事情连在一起,但它会变得如此复杂。如何用正则表达式做到这一点?
答案 0 :(得分:2)
只需编写正则表达式即可捕获由[
,任意字符和]
组成的组。
>>> 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']
安全地评估包含python文字的字符串,并将第三个元素从tuple
中拉出来。
答案 1 :(得分:1)
不需要正则表达式。将字符串包装在括号中以生成列表的字符串表示形式,然后使用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
。
答案 2 :(得分:1)
s = "0, 0, ['REFERENCED', 'UPTODATE', 'LRU'], 1"
start = s.find("[")
end = s.rfind("]")
print(s[start:end+1])
['REFERENCED', 'UPTODATE', 'LRU']
答案 3 :(得分:0)
如果您只是在寻找表达方式,请尝试以下方法:
"\[([\w\d,']+)\]"