2013-02-22 3 views
1

Я хотел бы сделать следующее и иметь указанную линию печать:Регулярного выражения в наборе

a=set(['bye', 'hits', 'hi']) 
if r'.i*' in a: 
    print "This is what I want to see." 
else: 
    print "Sadly, this is what I actually see." 

К сожалению, in ключевого слова не выполняет поиск по регулярному выражению на съемочной площадке.

Есть ли способ сделать это?

+0

Обратите внимание, что если вы прошли мимо 2.6, вы можете использовать набор литералов, например: '{'bye', 'hits', 'hi'}'. –

+0

Можете ли вы присоединиться к набору вместе в одну строку и проверить это? –

+0

Это может работать в некоторых случаях, @BillyMoon. Но поскольку совпадающие символы могут быть сопоставлены регулярным выражением, это не общее решение. – Richard

ответ

3

, к сожалению, вам нужен цикл здесь:

import re 
a = {'bye', 'hits', 'hi'} 
if any(re.match(r'.i*',s) for s in a): 
    print "see this" 

re.match я использовал, но неясно, хотите ли это или re.search.

Примечание: Все, что r'my string' обозначает это сырья строки, не регулярного выражения. Использование необработанной строки гарантирует, что нормальные escape-последовательности (те, которые начинаются с \) не экранируются. Это полезно в регулярных выражениях, так как модуль re также использует escape-последовательности. Используя необработанные строки, можно избежать необходимости использовать строки с двумя выходами (например, 'a\\double escaped string').

+2

Я также хочу указать «r» «' не является специальным синтаксисом для регулярных выражений, как может полагать OP; это [raw string] (http://docs.python.org/2/reference/lexical_analysis.html#string-literals), что означает, что обратная косая черта интерпретируется по-разному. – Cairnarvon

+0

Спасибо, @Cairnarvon, мои убеждения были ошибочны. – Richard

+0

Я позволил добавить немного о необработанных строках. –

Смежные вопросы