2015-07-29 7 views
0

Я использую Python 2.7 и задаю вопрос относительно регулярных выражений. Моя строка будет что-то вроде этого ...Совсем все ожидают определенной строки

"SecurityGroup:Pub HDP SG" 
"SecurityGroup:Group-Name" 
"SecurityGroup:TestName" 

Мое регулярное выражение выглядит, как показано ниже

[^S^e^c^r^i^t^y^G^r^o^u^p^:].* 

выше, кажется, работает, но у меня есть ощущение, что это не очень эффективно, а также если строка имеет в ней слово «группа», это тоже не удастся ...

То, что я ищу, - выход должен найти что-нибудь после двоеточия (:). Я также думал, что могу сделать что-то вроде использования группы 2 в качестве своего совпадения ... но проблема с этим заключается в том, что если в названии есть пробелы, то я не смогу получить правильное имя.

(SecurityGroup):(\w{1,}) 
+3

Если все строки всегда начинаются с «SecurityGroup:» почему бы не просто удалить первые 14 символов из каждого из них? – Kevin

+1

Покажите нам пример ввода, пожалуйста. –

+0

Если это всегда «SecurityGroup», вам не нужны регулярные выражения, вы можете просто найти эту строку с помощью str.find() и взять строку после. – cnluzon

ответ

2

Вы можете использовать lookbehind:

pattern = re.compile(r"(?<=SecurityGroup:)(.*)") 
matches = re.findall(pattern, your_string) 

разбив его:

(?<= # positive lookbehind. Matches things preceded by the following group 
    SecurityGroup: # pattern you want your matches preceded by 
) # end positive lookbehind 
    ( # start matching group 
    .* # any number of characters 
) # end matching group 

При испытании на струне "something something SecurityGroup:stuff and stuff" она возвращает matches = ['stuff and stuff'].

Edit:

Как уже отмечался в комментариях, pattern = re.compile(r"SecurityGroup:(.*)") выполняет то же самое. В этом случае вы соответствуете строке "SecurityGroup:", за которой следует что-либо, но только возвращающее то, что следует. Это, вероятно, более ясно, чем мой оригинальный пример с использованием lookbehind.

+1

Почему бы не просто «r» SecurityGroup: (. *) «'? – mkrieger1

+0

Хороший момент, похоже, что он выполнит то же самое. Но выглядят здорово! Я думаю, в этом случае не нужно. – Engineero

3

Почему бы просто не сделать

security_string.split(':')[1] 

Чтобы захватить вторую часть строки после двоеточия?

+1

Регулярное реже редко является самым питоническим решением. – ArtOfWarfare