python:使用正则表达式匹配字符串

时间:2012-10-28 04:27:27

标签: python regex

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

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

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

4 个答案:

答案 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

然后使用namearr ...

执行您想要的操作