Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用正则表达式从字符串中获取子字符串_Python_Regex - Fatal编程技术网

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否。这是一个好问题。我应该提到这一点