使用regex从字符串中获取子字符串

2024-04-25 20:30:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串的形式:

integerinteger,以逗号分隔的字符串列表,整数

例如:

"0, 0, ['REFERENCED', 'UPTODATE', 'LRU'], 1" 

我想返回这个子字符串['REFERENCED', 'UPTODATE', 'LRU']

我想过用split(", ")然后把东西连接在一起,但那太复杂了。如何使用regex实现这一点?你知道吗


Tags: 字符串列表整数integer形式regexsplit逗号
3条回答

不需要正则表达式。将字符串用括号括起来,使其成为列表的字符串表示形式,然后使用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 ^{}。你知道吗

只需编写一个正则表达式来捕获由[、任意字符和]组成的组。你知道吗

>>> 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中提取第三个元素。你知道吗

s = "0, 0, ['REFERENCED', 'UPTODATE', 'LRU'], 1"
start = s.find("[")
end = s.rfind("]")
print(s[start:end+1])
['REFERENCED', 'UPTODATE', 'LRU']

相关问题 更多 >