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

配列内のデータを取得するだけに関心がある場合は、正規表現の使用をスキップして、代わりに 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

次に、やりたいことをしnamearr...

于 2012-10-28T08:31:21.230 に答える