Python正则表达式分割函数多个分隔符

时间:2013-02-12 21:29:06

标签: python regex linux

这里我正在使用python正则表达式,这是我的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 个答案:

答案 0 :(得分:1)

我认为你不需要正则表达式,只需使用拆分两次:

output.split('.')[0].split('-')[-1]

答案 1 :(得分:1)

splitmaxsplitrsplitmaxsplit

之间的差异微不足道
> 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

答案 2 :(得分:1)

假设你有非常一致的主机名,而你只想要最后一部分......

首先,使用os.uname(您已经导入),而不是执行uname命令,然后只需要两个分割:

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'

〜撬

答案 3 :(得分:1)

如果它不必是正则表达式,您可以再次使用拆分:

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")