2010-07-17 81 views
3

在python正則表達式中,如何匹配大字符串文本和標誌,如果任何一個正則表達式匹配的話......我試過用「|」或發表聲明,我已經嘗試做一個正則表達式列表..沒有工作對我來說..這裏是我試圖做的或..Python正則表達式(在一個字符串中搜索多個值)

我想我的「或」被註釋掉

爲例
patterns=re.compile(r'[\btext String1\b] | [\bText String2\b]') 

if(patterns.search(MyTextFile)): 
    print ("YAY one of your text patterns is in this file") 

上面的代碼總是說它匹配,無論字符串是否出現,如果我改變它一下我得到匹配的第一個正則表達式,但從來沒有檢查第二....我相信這是因爲「原」是評論我的或聲明,但我將如何解決這個問題?

我也試圖通過取出「原始」的聲明,並把雙斜線我\ b對於逃避來解決這個問題,但沒有工作,要麼:(

patterns=re.compile(\\btext String1\\b | \\bText String2\\b) 

if(patterns.search(MyTextFile)): 
    print ("YAY one of your text patterns is in this file") 

然後我試圖做2個獨立的原始報表與或和解釋抱怨不支持STR opperands ...

patterns=re.compile(r'\btext String1\b' | r'\bText String2\b') 

if(patterns.search(MyTextFile)): 
    print ("YAY one of your text patterns is in this file") 

回答

7
patterns=re.compile(r'(\btext String1\b)|(\bText String2\b)') 

你想要一組(可選捕獲),而不是一個字符類。從技術上講,你不需要股份公司在這裏:

patterns=re.compile(r'\btext String1\b|\bText String2\b') 

也將工作(沒有任何捕獲)。

你的方式是檢查第一個方括號之間的任何一個字符,或者第二個方括號之間的字符之一。您可能會發現regex tutorial有幫助。

應該清楚「不支持的str操作數」錯誤來自哪裏。你不能使用OR字符串,你必須記住|在參數甚至到達compile之前被處理。

+0

我懷疑你也應該去掉'|'周圍的空格,因爲它在正則表達式中很重要,我懷疑OP是否意識到這一點。此外,您在這裏不需要任何組,無論是捕獲還是非捕獲。 – 2010-07-17 15:42:23

+0

@Tim,是的,我發佈後不久就注意到了。 – 2010-07-17 15:43:59

+0

Sweeeet工作!!!!我可以發誓我試過 patterns = re.compile(r'(\ btext String1 \ b)|(\ bText String2 \ b)') 謝謝!!! 有沒有人有一個非常好的正則表達式教程/書等的建議?我正在慢慢學習,因爲我正在從事項目.. – eyes0cket 2010-07-17 16:09:16

0

該部分[\ btext String1 \ b]表示存在「字詞分隔符」或「text String1」中的一個字母。因此,這與我認爲的空白線相匹配。

0

在RE圖案,方括號[ ]指示「字符類別」(依賴於它們內部什麼,或「除這些中的一個的任何字符」,「這些字符中的任何一個」,後者表示由一個脫字符號^作爲開幕後的第一個字符[)。這就是你要表達的內容,並且它與你想要的想要的完全無關 - 只要去掉括號,你應該沒問題;-)。

+0

感謝您的信息!我在網上看到了一些例子中的[],看起來幾乎和我嘗試做的一樣,所以我一味地將它合併到LOL中,它只是表達式之間的分隔符 – eyes0cket 2010-07-17 16:10:56

相關問題