人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Pythonでの文字列処理について。
20081110000001.543210 >> Host-1 192.168.0.1:12345
という文字列が与えられたときに、
['20081110000001', '543210', 'Host-1', '192.168.0.1', '12345']
というリストを得たいと考えています。
これまでは、

import re

line = '20081110000001.543210 >> Host-1 192.168.0.1:12345'
s = re.sub('(^\d+)\.(\d+) >> ([0-9A-z_-]+) (\d+\.\d+\.\d+\.\d+):(\d+)', '\g<1>,\g<2>,\g<3>,\g<4>,\g<5>', line)
lst = s.split(',')

のように、文字列lineから、いったん【,】で区切った文字列sを作って、それをsplitしてリストlstを得ていたのですが、いちいちsをつくるあたりが冗長な気がしています。
つまり、上記のコードで、re.sub()の第2引数で\g<x>を使って後方参照している文字列を、リストで取得したい、ということです。

このような書き方以外にうまい方法はないでしょうか。

●質問者: S0R5
●カテゴリ:コンピュータ
✍キーワード:Python sub T-1 うまい コード
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● karaki
●30ポイント

フォーマットが以下の形で決まっているなら、replaceで対処できると思います。

s = "yyyymmddhhmiss.xxxxxx >> AAAA-X BBB.CCC.DDD.EEE:FFFF"
lst = [s[:14]]+s[15:].replace(" >> ",":").replace(" ",":").split(":")
>>> s="20081110000001.543210 >> Host-1 192.168.0.1:12345"
>>> [s[:14]]+s[15:].replace(" >> ",":").replace(" ",":").split(":")
['20081110000001', '543210', 'Host-1', '192.168.0.1', '12345']

書き方は他にも考えられると思いますが、このやり方が簡単ではないかと思います。


URLはダミーです。

http://www.python.org/

◎質問者からの返答

replaceでデリミタを1種類にしてsplitするという方法ですか。たしかにこのフォーマットに決まってれば使えますね。ありがとうございます。

質問の書きかたが悪かったんですが、できれば、このフォーマットに限らず、任意のフォーマットで、今回書いたような、re.sub()の第2引数で\g<x>を使って後方参照している文字列をリストにする、汎用的な方法がないものかなと考えましたが、どうでしょうか。つまり、

line = 'abcdefghijklmnopqrstuvwxyz0123456789'
s = re.sub('(^abc).{3}(.{5}).+', '\g<1>,\g<2>', line)
lst = s.split(',')

で、

['abc', 'ghijk']

を得るといった場合にも使えるものを想定しています。


2 ● znz
●50ポイント ベストアンサー

リストではなくタプルになってしまいますが、MatchObjectのgroupsを使えばいいのではないでしょうか。

リストじゃないとダメならlistと組み合わせで。

import re
line = '20081110000001.543210 >> Host-1 192.168.0.1:12345'
m = re.match('(^\d+)\.(\d+) >> ([0-9A-z_-]+) (\d+\.\d+\.\d+\.\d+):(\d+)', line)
m.groups() #=> ('20081110000001', '543210', 'Host-1', '192.168.0.1', '12345')
list(m.groups()) #=> ['20081110000001', '543210', 'Host-1', '192.168.0.1', '12345']
◎質問者からの返答

なるほど、そういうのがあったんですね。まさに求めていたものです。

助かりました。ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ