Python 使用正则表达式从字符串中获取子字符串
我有一个字符串,格式如下:Python 使用正则表达式从字符串中获取子字符串,python,regex,Python,Regex,我有一个字符串,格式如下: integer,integer,以逗号分隔的字符串列表,integer 例如: "0, 0, ['REFERENCED', 'UPTODATE', 'LRU'], 1" 我想返回这个子字符串['REFERENCED','update','LRU'] 我曾想过使用split(“,”),然后将东西连接在一起,但这太复杂了。如何使用regex实现这一点?如果您只是在寻找表达式,请尝试以下操作: "\[([\w\d,']+)\]" 如果您只是在寻找表达式,请尝试以下操作
integer
,integer
,以逗号分隔的字符串列表,integer
例如:
"0, 0, ['REFERENCED', 'UPTODATE', 'LRU'], 1"
我想返回这个子字符串['REFERENCED','update','LRU']
我曾想过使用
split(“,”)
,然后将东西连接在一起,但这太复杂了。如何使用regex实现这一点?如果您只是在寻找表达式,请尝试以下操作:
"\[([\w\d,']+)\]"
如果您只是在寻找表达式,请尝试以下操作:
"\[([\w\d,']+)\]"
只需编写一个正则表达式来捕获由
[
、任意字符和]
组成的组
>>> import re
>>> s = "0, 0, ['REFERENCED', 'UPTODATE', 'LRU'], 1"
>>> re.search(r'(\[.*\])', s).group(1)
"['REFERENCED', 'UPTODATE', 'LRU']"
如果输入的结构确实如此良好,您可以使用ast.literal\u eval
:
>>> import ast
>>> ast.literal_eval(s)[2]
['REFERENCED', 'UPTODATE', 'LRU']
要安全地计算包含python文本的字符串并从
元组中提取第三个元素,只需编写一个正则表达式来捕获由[
、任意字符和]
组成的组
>>> import re
>>> s = "0, 0, ['REFERENCED', 'UPTODATE', 'LRU'], 1"
>>> re.search(r'(\[.*\])', s).group(1)
"['REFERENCED', 'UPTODATE', 'LRU']"
如果输入的结构确实如此良好,您可以使用ast.literal\u eval
:
>>> import ast
>>> ast.literal_eval(s)[2]
['REFERENCED', 'UPTODATE', 'LRU']
要安全地计算包含python文本的字符串并从元组中拉出第三个元素,不需要正则表达式。将字符串用括号括起来以表示列表,然后使用ast.literal\u 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\u eval
。抵制诱惑。使用eval
是不安全的,因为它会对任何Python表达式求值,即使它包含一些讨厌的东西,例如从硬盘删除文件的指令。您可以毫无恐惧地使用ast.literal\u eval,因为它不需要正则表达式。将字符串用括号括起来以表示列表,然后使用ast.literal\u 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\u eval
。抵制诱惑。使用eval
是不安全的,因为它会对任何Python表达式求值,即使它包含一些讨厌的东西,例如从硬盘删除文件的指令。您可以毫无恐惧地使用ast.literal\u eval
,因为它是一种语法输入?它可能与Python源代码兼容吗?您可以使用吗?“内部”字符串是否可以包含[
或]
字符?@TomDalton否。这是一个好问题。我应该提到输入的语法是什么?它可能与Python源代码兼容吗?您可以使用吗?“内部”字符串是否可以包含[
或]
字符?@TomDalton否。这是一个好问题。我应该提到这一点