2

この正規表現を Pythonreモジュールに変換するのを手伝ってくれる人はいますか?

sed -e "s/^[^ ]* \([^ ]*\) \([0-9]*\) \([0-9:]*\) \([0-9]*\) /\1 \2 \4 \3 /"

私が理解しているように、これはあるテキストを別のテキストに置き換えます。reモジュールを使用してこのようなものを作成するにはどうすればよいですか? ありがとう!

たとえばFri Mar 21 07:16:51 2008 -0600、 に変換されMar 21 2008 07:16:51 -0600ます。

source = 'Fri Mar 21 07:16:51 2008 -0600'
pattern = re.compile('^[^ ]* \([^ ]*\) \([0-9]*\) \([0-9:]*\) \([0-9]*\) ')
result = re.sub('\\1 \\2 \\4 \\3 ', source)
4

2 に答える 2

2

次のように、パターンの括弧にもバックスラッシュをドロップします。

pattern = re.compile('^[^ ]* ([^ ]*) ([0-9]*) ([0-9:]*) ([0-9]*) ')

あなたが持っていた方法では、\1 ... \4 に対応する 4 つのグループを実際にキャプチャするために、グループ化として認識する必要がある括弧をエスケープしていました。

于 2012-04-27T19:01:49.550 に答える
1

これを試してください、ワンライナーバージョン:

import re
re.sub(r'^[^ ]* ([^ ]*) ([0-9]*) ([0-9:]*) ([0-9]*) ', '\g<1> \g<2> \g<3> \g<4>', source)

または、コンパイルされたパターンを使用すると、同じ正規表現を再利用する場合により効率的になります。

import re
pattern = re.compile(r'^[^ ]* ([^ ]*) ([0-9]*) ([0-9:]*) ([0-9]*) ')
pattern.sub('\g<1> \g<2> \g<3> \g<4>', source)
于 2012-04-27T19:03:57.233 に答える