1

だから、私はまだ正規表現とPythonの初心者です。しばらく探していましたが、探しているものを尋ねる方法がわかりません。

フォーマットされた文字列からリストのリストまたは辞書にデータを取得する必要があります。

-------------------------------------------------------------------
Frank         114      0         0         0          0         114       
Joe           49       1         0         0          0         50        
Bob           37       0         0         0          0         37        
Sally         34       2         0         0          0         36     

これはスクリプトの出力です。現在私は持っています:

match_list = []
match = re.search('\n(\w+)\s+(\d*)\s+(\d*)', output)
  if match:
    match_list.append([match.group(1),
                       match.group(2),
                       match.group(3)])
>>>print match_list
[['frank', '114', '0']]

match_listリターンが必要なことを除いて、これは完璧です:

[['frank', '114', '0'],
 ['Joe', '49', '1'],
 ['Bob', '37', '0'],
 ['Sally', '34', '2']]

私の最初の考えは、for ループで、match.group(1) が既にリストされているかどうかを確認し、リストされている場合は次に移動することでしたが、その方法がわからないことに気付きました。しかし、そこにあります。私はこれを理解するのに苦労しています。どんな助けでも素晴らしいでしょう!:)

ああまた。リストのサイズが変わります。1 人のユーザーしかいない場合もあれば、20 人のユーザーがいる場合もあります。したがって、巨大な静的正規表現をセットアップするだけです。(私が知っていること...)

4

2 に答える 2

4

あなたが使用することができますre.findall

match_list = []
match = re.findall('\n(\w+)\s+(\d*)\s+(\d*)', output)
for k in match:
    #k will be a tuple like this: ('frank', '114', '0')
    match_list.append(list(k))

またはワンライナーと同じ解決策:

match_list = map(list, re.findall('\n(\w+)\s+(\d*)\s+(\d*)', output))
于 2012-09-11T20:28:18.737 に答える
3

正規表現は必要ありません:

table="""\
-------------------------------------------------------------------
Frank         114      0         0         0          0         114       
Joe           49       1         0         0          0         50        
Bob           37       0         0         0          0         37        
Sally         34       2         0         0          0         36"""

print [line.split() for line in table.splitlines()[1:]]

または、正規表現が必要な場合:

print [list(t) for t in re.findall(r'^(\w+)'+r'\s+(\d+)'*6,table,re.MULTILINE)] 

どちらの場合も、次のように出力されます。

[['Frank', '114', '0', '0', '0', '0', '114'], 
 ['Joe', '49', '1', '0', '0', '0', '50'], 
 ['Bob', '37', '0', '0', '0', '0', '37'], 
 ['Sally', '34', '2', '0', '0', '0', '36']]
于 2012-09-11T20:31:51.103 に答える