我正在学习正则表达式。不明白如何匹配以下模式:
" myArray = ["Var1","Var2"]; "
理想情况下,我想获取数组中的数据并转换为python数组
答案 0 :(得分:2)
数组项是否保证被双引号包围?
这是一种快速而肮脏的方法:
re.findall('"([^,]+)"', source)
其中source是你的字符串。
我没有逃避正则表达式中的双引号,因为你也可以在Python中使用单引号。
这将返回由双引号括起的每个项目的列表
所以在你的例子中:['Var1', 'Var2']
答案 1 :(得分: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']
虽然它实际上是一个坏主意,因为它在全局变量中写入垃圾。相反,请尝试使用单独的字典或其他内容。
答案 2 :(得分:0)
如果您只想获取数组中的数据,可以跳过使用正则表达式并使用eval。 考虑一下:
myArray = eval('["Var1","Var2"]')
如果必须使用示例中给出的行,也可以使用exec。但是这个命令有点危险,如果使用它需要特别小心。
答案 3 :(得分: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
...