2015-08-21 4 views
-7

Что представляет собой шаблон регулярного выражения, соответствующий строке, начинающейся с abc-def-xyz и заканчивающейся чем угодно?Шаблон регулярного выражения для соответствия строке

+2

Что происходит, когда вы пытаетесь? 'samplemethod (filter = r'abc-def ')' – mhawke

+0

Я предполагаю, что он не принимает этот шаблон, потому что я не получаю никакого вывода для него –

+0

Возможно, шаблон не соответствует чему-либо в целевой строке? Какова реализация функции? Можете ли вы опубликовать его здесь? – mhawke

ответ

1

Update

Поскольку вы только хотите, чтобы соответствовать имена хостов, которые начинаются с 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' ,

+0

Thanx. Но регулярное выражение, которое вы предоставили, просто ограничьте его аббревиатурой и отправкой. Поскольку список также содержит узлы, такие как abc-def.somevalue.desktop.rul.com, abc-def.somevalue1-somevalue2.desktop.rul.com, abc-def.somevalue-somevalue1-somevalue2.desktop.rul.com –

+0

В основном, я просто хочу шаблон регулярного выражения, который извлекает имя хоста, начиная с abc-def, это –

+0

Прошу прощения. Существует адекватное объяснение шаблона, чтобы вы могли изменить его для себя. Это совершенно очевидно. – mhawke