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

2024-04-24 14:20:12 发布

您现在位置:Python中文网/ 问答频道 /正文

有更好的方法来处理正则表达式

>>> 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']

给了我“罗斯”。你知道吗

最后:

a=re.match(r'backup-(\w+)', ' '.join(HOSTS))
>>> a.group()
'backup-ros' 

我认为这是正确的。不过,我还是想问,这是不是正确的方法,更好的方法。你知道吗

编辑:我在评论了几句之后意识到,不清楚我在找什么。我需要在一个目录中找到名为“backup somename”的目录名。但是我不想包括那些名字是“backupasomename”或“backupbsomename”的目录。 这就是为什么我的第一个for循环对我来说不够好。你知道吗

提前谢谢。 盎司


Tags: 方法inre目录hostforrosfiles
2条回答

而不是这个

a=re.findall(r'backup-(\w+)', ' '.join(HOSTS)) 

使用

a=re.findall(r'(backup-[\w]+)', ' '.join(HOSTS)).

问题是您的正则表达式与整个模式匹配,但在最后是分组\w+。这是一个更简单的方法

如果没有regex,您能考虑.startswith()吗?你知道吗

>>> HOSTS = ['backup-ros', 'backupa-files', 'print-server1','print-server2']
>>> backups = [x for x in HOSTS if x.startswith('backup-')]
>>> backups
['backup-ros']

无需将列表加入字符串。你知道吗

相关问题 更多 >