0

ここで私はpythonregexで遊んでいます、そしてここに私のunameコマンド出力があります

$ uname -n
usa-ca-app01.example.com

これが私のPythonスクリプトです

#!/usr/bin/python

import os
from time import strftime
import commands

status, output = commands.getstatusoutput("uname -n")
backupfile = output.split('.')[0] + "-backup-" + strftime("%m-%d-%y")

print backupfile

スクリプト出力は次のとおりです。

$ ./backup.py
usa-ca-app01-backup-02-12-13

私の質問:次のような出力が必要なapp01-backup-02-12-13ので、正規表現関数で複数の区切り文字を使用splitして必要な出力を取得できますか、それともPythonでエレガントな正規表現を使用する良い方法はありますか?

4

4 に答える 4

2

正規表現である必要がない場合は、splitを再度使用できます。

backupfile = output.split('.')[0].split('-')[2] + "-backup-" + strftime("%m-%d-%y")

または、複数の「-」区切り文字を使用して、使用できる場合に備えて常に最後の区切り文字が必要な場合もあります。

subdomain = output.split('.')[0]
delimiter = "-"
subdomain_split = subdomain.split(delimiter)
split_length = len(subdomain_split)

backupfile = subdomain_split[split_length-1] + "-backup-" + strftime("%m-%d-%y")

または正規表現を使用:

regex = re.compile(".*-([a-zA-Z0-9]*).*",re.IGNORECASE)
r = regex.search(output)
backupfile = r.groups(0)[0] + "-backup-" + strftime("%m-%d-%y")
于 2013-02-12T21:58:58.560 に答える
1

正規表現は必要ないと思います。splitを2回使用するだけです。

output.split('.')[0].split('-')[-1]
于 2013-02-12T21:35:34.330 に答える
1

splitなしmaxsplitとありrsplitの違いはごくわずかですmaxsplit

> python -m timeit "'usa-ca-app01.example.com'.split('.')[0].split('-',)[-1]"
1000000 loops, best of 3: 0.868 usec per loop
> python -m timeit "'usa-ca-app01.example.com'.split('.', 1)[0].rsplit('-', 1)[-1]"
1000000 loops, best of 3: 0.891 usec per loop
于 2013-02-12T21:36:48.867 に答える
1

非常に一貫性のあるホスト名があり、最後の部分だけが必要だと仮定します...

まず、unameコマンドを実行する代わりに、os.uname(既にインポートしたもの)を使用してから、次のように2つの分割を行います。

hostname = os.uname()[1]
backupfile = hostname.split('.')[0].split('-')[2] + '-backup-' + strftime('%m-%d-%y')

出力例を次に示します。

>>> hostname.split('.')[0].split('-')[2] + '-backup-' + strftime('%m-%d-%y')
'app01-backup-02-12-13'

ただし、使用することをお勧めし%Y-%m-%dます。ファイル名で並べ替える方が理にかなっています。

>>> hostname.split('.')[0].split('-')[2] + '-backup-' + strftime('%Y-%m-%d')
'app01-backup-2013-02-12'

〜tommy

于 2013-02-12T21:44:53.343 に答える