0

私は次のコードを持っています:

import re

vars='"NAME=Product","TYPE=","VERSION=1.2","VISIBILITY=","SRC=","FOLDER=TRUE","Text=foo, containing, commas"'
list = re.findall(r'\w+=".*?"', vars)

for i in range(1,len(list)):
   print list[i]

出力は次のようになります。

VISIBILITY=","
SRC=","

ただし、コンマ自体を含むものであっても、すべての引数を検索(分割)したいと思います。代わりに、出力は次のようになります。

"NAME=Product"
"TYPE="
"VERSION=1.2"
"VISIBILITY="
"SRC="
"FOLDER=TRUE"
"Text=foo, containing, commas"

正規表現について何を変更する必要がありますか?

4

5 に答える 5

4

正規表現は、=等号の右側の値を囲む引用符のみを期待しているようですが、入力には式全体を引用符で囲んでいます。

調整は簡単です:

re.findall(r'"\w+=.*?"', vars)

次のような入力例でこれを実行すると、次のようになります。

>>> re.findall(r'"\w+=.*?"', vars)
['"NAME=Product"', '"TYPE="', '"VERSION=1.2"', '"VISIBILITY="', '"SRC="', '"FOLDER=TRUE"', '"Text=foo, containing, commas"']
>>> for match in re.findall(r'"\w+=.*?"', vars):
...     print match
... 
"NAME=Product"
"TYPE="
"VERSION=1.2"
"VISIBILITY="
"SRC="
"FOLDER=TRUE"
"Text=foo, containing, commas"
于 2013-03-19T15:33:28.303 に答える
3

正規表現が必要かどうかわかりません:

[i for i in  vars.split('"') if i not in ',']

アウト:

['NAME=Product',
 'TYPE=',
 'VERSION=1.2',
 'VISIBILITY=',
 'SRC=',
 'FOLDER=TRUE',
 'Text=foo, containing, commas']
于 2013-03-19T15:36:06.290 に答える
1

これはあなたが本当に望むものに近いと思います:

 list = re.findall(r'"(\w+)=(.*?)"', VARS)
于 2013-03-19T15:35:22.783 に答える
1

CSV を使用してこれを行うことができます。

import csv

vars='"NAME=Product","TYPE=","VERSION=1.2","VISIBILITY=","SRC=","FOLDER=TRUE","Text=foo, containing, commas"'
reader=csv.reader(vars,delimiter=",",quotechar='"')

print [''.join(tgt) for tgt in reader if ''.join(tgt)]

版画:

['NAME=Product', 'TYPE=', 
 'VERSION=1.2', 
 'VISIBILITY=', 
 'SRC=', 
 'FOLDER=TRUE', 
 'Text=foo, containing, commas']
于 2013-03-19T15:45:53.190 に答える
0
import re

vari=('"NAME=Product",'
      '"TYPE=","VERSION=1.2",'
      '"VISIBILITY=","SRC=","FOLDER=TRUE",'
      '"Text=foo, containing, commas"')

print '\n'.join(re.findall('"[^"=]+=[^"=]*"', vari))
于 2013-03-19T16:29:50.987 に答える