1

我正在学习正则表达式。不明白如何匹配以下模式:

" myArray = ["Var1","Var2"];  "

理想情况下,我想获取数组中的数据并转换为 python 数组

4

4 回答 4

2

数组项是否保证用双引号括起来?

这是一种快速而肮脏的方法:

re.findall('"([^,]+)"', source)

source 是你的字符串。我没有转义正则表达式中的双引号,因为您也可以在 Python 中使用单引号。这将返回用双引号括起来的每个项目的列表,因此在您的示例中:['Var1', 'Var2']

于 2012-10-28T05:07:46.897 回答
0

正则表达式的复杂性因输入的变化而有很大差异。匹配给定字符串的最简单的表达式是:

>>> from re import search, findall
>>> s = ' myArray = ["Var1","Var2"];  '
>>> name, body = search(r'\s*(\w*)\s*=\s*\[(.*)\]', s).groups(0)
>>> contents = findall(r'"(\w*)"', body)
>>> name, contents
('myArray', ['Var1', 'Var2'])

“转换”为 python 数组可以这样完成:

>>> globals().update({name: contents})
>>> myArray
['Var1', 'Var2']

虽然这实际上是一个坏主意,因为它会在全局变量中写入垃圾。相反,请尝试使用单独的字典或其他东西。

于 2012-10-28T05:12:29.873 回答
0

如果您只对获取数组中的数据感兴趣,则可以跳过使用 regex 并改用 eval。考虑一下:

myArray = eval('["Var1","Var2"]')

如果必须使用示例中给出的行,也可以使用 exec。但是,此命令有些危险,使用时需要特别小心。

于 2012-10-28T08:02:40.067 回答
0

在不使用 re 的情况下,您可以使用内置字符串方法,literal_eval并且根据您的示例返回一个可用list对象:

from ast import literal_eval
text = ' myArray = ["Var1","Var2"];  '
name, arr_text = (el.strip('; ') for el in text.split('='))
arr  = literal_eval(arr_text)
print name, arr

然后做你想做的,name然后arr......

于 2012-10-28T08:31:21.230 回答