匹配子串列表中的子字符串

时间:2012-02-10 16:51:57

标签: python regex

使用正则表达式有更好的方法,

>>> 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”。 这就是为什么我的第一个循环对我来说不够好。

先谢谢。 盎司

2 个答案:

答案 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 +。这是一种更简单的方式