正規表現を学んでいます。次のパターンに一致させる方法がわかりません:
" myArray = ["Var1","Var2"]; "
理想的には、配列内のデータを取得し、python 配列に変換したい
配列項目は二重引用符で囲まれていることが保証されていますか?
これは手早く汚い方法です。
re.findall('"([^,]+)"', source)
source は文字列です。Python でも一重引用符を使用できるため、正規表現で二重引用符をエスケープしませんでした。これは、二重引用符で囲まれた各項目のリストを返すため、例では次のようになります。['Var1', 'Var2']
正規表現の複雑さは、入力のバリエーションによって大きく異なります。指定された文字列に一致する最も簡単な式は次のとおりです。
>>> 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']
グローバルにガベージを書き込むので、実際には悪い考えですが。代わりに、別の辞書などを使用してみてください。
配列内のデータを取得するだけに関心がある場合は、正規表現の使用をスキップして、代わりに eval を使用できます。このことを考慮:
myArray = eval('["Var1","Var2"]')
例で示した行を使用する必要がある場合は、exec も使用できます。ただし、このコマンドはやや危険であり、使用する場合は特別な注意が必要です。
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
...