更新
由于您只想匹配以abc-def 开头的主机名,您可以简单地使用str.startswith():
hosts = ['abc-def.1.desktop.rul.com',
'abc-def.2.desktop.rul.com',
'abc-def.3.desktop.rul.com',
'abc-def.4.desktop.rul.com',
'abc-def.44.desktop.rul.com',
'abc-def.100.desktop.rul.com',
'qwe-rty.100.desktop.rul.com',
'z.100.desktop.rul.com',
'192.168.1.10',
'abc-def.100abc.desktop.rul.com']
filtered_hosts = [host for host in hosts if host.startswith('abc-def')]
print filtered_hosts
输出
['abc-def.1.desktop.rul.com', 'abc-def.2.desktop.rul.com', 'abc-def.3.desktop.rul.com', 'abc-def.4. desktop.rul.com','abc-def.44.desktop.rul.com','abc-def.100.desktop.rul.com','abc-def.100abc.desktop.rul.com']
原始正则表达式解决方案如下。
假设您的数据是一个主机名列表,例如:
hosts = ['abc-def.1.desktop.rul.com',
'abc-def.2.desktop.rul.com',
'abc-def.3.desktop.rul.com',
'abc-def.4.desktop.rul.com',
'abc-def.44.desktop.rul.com',
'abc-def.100.desktop.rul.com',
'qwe-rty.100.desktop.rul.com',
'z.100.desktop.rul.com',
'192.168.1.10',
'abc-def.100abc.desktop.rul.com']
import re
pattern = re.compile(r'abc-def\.\d+\.')
filtered_hosts = [host for host in hosts if pattern.match(host)]
print filtered_hosts
输出
['abc-def.1.desktop.rul.com', 'abc-def.2.desktop.rul.com', 'abc-def.3.desktop.rul.com', 'abc-def.4. desktop.rul.com','abc-def.44.desktop.rul.com','abc-def.100.desktop.rul.com']
正则表达式模式表示匹配以abc-def. 开头的任何行,后跟一个或多个数字,后跟一个点。
如果您想匹配更通用的模式,例如任何 3 个小写字母后跟 - 和另外 3 个小写字母的序列,您可以这样做:
pattern = re.compile(r'[a-z]{3}-[a-z]{3}\.\d+\.')
现在输出还包括'qwe-rty.100.desktop.rul.com'。