这里我正在使用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?
答案 0 :(得分:1)
我认为你不需要正则表达式,只需使用拆分两次:
output.split('.')[0].split('-')[-1]
答案 1 :(得分: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
答案 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")