使用正则表达式有更好的方法,
>>> HOSTS=['backup-ros', 'backupa-files', 'print-server1','print-server2']
>>> for host in HOSTS:
... if 'backup' in host:
...
backup-ros
backupa-files
部分正确。
我试过了:
a=re.findall(r'backup-(\w+)', ' '.join(HOSTS))
>>> a
['ros']
给了我'ros'。
最后:
a=re.match(r'backup-(\w+)', ' '.join(HOSTS))
>>> a.group()
'backup-ros'
我认为这是正确的。但是,我仍然想问这是否是更好的方法。
编辑:经过一番评论后我意识到,目前还不清楚我在寻找什么。我需要在目录中找到名为“backup-somename”的目录名称。但我不想包含名称的目录,例如“backupa-somename”或“backupb-somename”。 这就是为什么我的第一个循环对我来说不够好。先谢谢。 盎司
答案 0 :(得分:4)
如果没有正则表达式,您能考虑.startswith()
吗?
>>> HOSTS = ['backup-ros', 'backupa-files', 'print-server1','print-server2']
>>> backups = [x for x in HOSTS if x.startswith('backup-')]
>>> backups
['backup-ros']
无需将列表加入字符串。
答案 1 :(得分:0)
而不是这个
a=re.findall(r'backup-(\w+)', ' '.join(HOSTS))
使用
a=re.findall(r'(backup-[\w]+)', ' '.join(HOSTS)).
问题是你的正则表达式匹配整个模式但最后是分组\ w +。这是一种更简单的方式