2

次の出力を解析する必要があります:-

|------------------------------|-----------------| ----------------------------------------|--------------------- ----------|------------|
| | アセンブリ名 | ユーザー名 | パス | パス 開始時間 | 状態 |
|---------127.0.0.1-----------|-----|------シェル バージョン 1.2.1-13-09-27------|--------------------|----------- -|
|ng40core2 |ng40 |/home/regress/ng40core2 |2013-10-07 16:55:52 |実行中 |
|ng40core1 |ng40 |/home/regress/ng40core1 |2013-10-07 16:53:54 |実行中 |
|------------------------------|-----------------| ----------------------------------------|--------------------- ----------|------------|

この出力には、ng40core のバージョンが異なる複数のエントリが含まれている可能性があります。

単一行の正規表現を作成しましたが、

regex_list = ['\s*',
'\S+\s*',
'\S+\s+Assembly\s+name\s+\S+\s+User\s+name\s+\S+\s+Path\s+\S+\s+Start\s+Time\s+\S+\s+State\s+\S+\s*',
'\|\S+\d+\.\d+\.\d+\.\d+\S+Shell\s+version\s+.*\s*',
'\|(?P<ng40core_instance>\S+)\s+\|(?P<user_name>\S+)\s+\|(?P<path>\S+)\s+\|(?P<start_time>\d+\-\d+\-\d+\s+\d+:\d+:\d+)\s+\|(?P<state>\w+)\s+\|\s*']

1 つのキーに対して複数の値を取得したい。
「ng40core2」の場合 - ユーザー名、パス、開始時刻、および状態
が必要です 「ng40core1」の場合と同じように - ユーザー名、パス、開始時刻、および状態が必要です。

これを達成する方法を提案していただけると本当に助かります。

4

2 に答える 2

2

re.findall()目的の行に正規表現を使用できます

print re.findall(r'\|(?P<ng40core_instance>\S+)\s+\|(?P<user_name>\S+)\s+\|(?P<path>\S+)\s+\|(?P<start_time>\d+\-\d+\-\d+\s+\d+:\d+:\d+)\s+\|(?P<state>\w+)\s+\|\s*', text)

出力:

[('ng40core2', 'ng40', '/home/regress/ng40core2', '2013-10-07 16:55:52', '実行中'), ('ng40core1', 'ng40', '/home/リグレス/ng40core1'、'2013-10-07 16:53:54'、'実行中')]

于 2013-10-08T12:10:48.433 に答える