2013-02-22 55 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'}'。 – 2013-02-22 01:48:09

+0

你可以加入到一個單一的字符串,並測試? – 2013-02-22 01:52:43

+0

這可能適用於@BillyMoon的一些情況。但是,由於連接字符可能與正則表達式匹配,因此這不是一個通用的解決方案。 – Richard 2013-02-22 01:56:43

回答

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'表示是原始字符串,不是正則表達式。使用原始字符串可確保正常轉義序列(以\開頭)不會轉義。這在正則表達式中很有用,因爲re模塊也使用轉義序列。通過使用原始字符串,可以避免必須雙重轉義字符串(例如'a\\double escaped string')。

+2

我還想指出'r「」'不是正則表達式的特殊語法,因爲OP可能相信;它是一個[原始字符串](http://docs.python.org/2/reference/lexical_analysis.html#string-literals),這意味着反斜槓的解釋不同。 – Cairnarvon 2013-02-22 01:53:31

+0

謝謝@Cairnarvon,我的信念是錯誤的。 – Richard 2013-02-22 01:55:31

+0

我冒昧地添加了一些關於原始字符串的信息。 – 2013-02-22 01:55:35