2009-04-16 93 views
3

我有這樣的正則表達式的代碼在python:爲什麼添加組時不匹配正則表達式?

if re.search(r"\{\\fad|fade\(\d{1,4},\d{1,4}\)\}", text): 
    print(re.search(r"\{\\fad|fade\((\d{1,4}),(\d{1,4})\)\}", text).groups()) 

text{\fad(200,200)}Épisode 101 : {\i1}The Ghost{\i0}\Nv. 1.03並從文件中讀取(不知道有沒有什麼幫助)。

這將返回以下:

(None, None) 

當我在打印改變正則表達式來r"\{\\fad\((\d{1,4}),(\d{1,4})\)\}",它返回正確的值:

(200, 200) 

任何人都可以看到爲什麼條件fad|fade正則表達式匹配在re.search但不返回打印中組的正確值?

謝謝。

+0

我會考慮修改您的標題,使得它更。搜索能夠, – 2009-04-16 20:46:01

+0

要麼我錯過了問題的重點,要麼所有人都在回答。是不是真正的問題「爲什麼添加組時,正則表達式不匹配?」 – 2009-04-16 20:50:26

+0

標題已更改。感謝您的建議。 – 2009-04-16 21:06:52

回答

6

投入額外的括號:re.search(r"{(?:\\fad|fade)\((\d{1,4}),(\d{1,4})\)}", text).groups()

此外,逃逸{}括號是沒有必要的,它只是不必要的雜波您的正則表達式。

1

我認爲你的條件是尋找「\ fad」或「淡入淡出」,我認爲如果你想尋找「\ fad」或「\ fade」,你需要在分組外部移動一個\。

+0

如果我想尋找「時尚」或「淡入淡出」?有沒有像(fad | fade)那樣將它分組的方法?我的意思是,我不想在調用.groups()時找到它。我只是想要別人的價值觀。 – 2009-04-16 20:48:17

+0

是的,但我認爲其他人已經給出了正確的例子,所以我會在我離開時退出......正則表達式的雷區:-) – 2009-04-16 20:53:55

2

試試這個:

​​
4

的支架的一部分,或者分支開始褪色,所以在尋找或者「{時尚」或「變臉(...」你需要組時尚|褪色部分一起嘗試:

r"\{\\(?:fad|fade)\(\d{1,4},\d{1,4}\)\}" 

[編輯] 你就進入if塊是因爲正則表達式匹配,但原因僅僅是因爲它檢測開頭「{\時尚。 「。 H但是,該比賽的這一部分不包含任何組。如果要捕獲它們,您需要與定義組的部分相匹配。周圍的選擇

0

我不知道正則表達式的python方言,但是你不需要爲某種方式對「fad | fade」進行「組合」,以確保它沒有試圖找到「時尚或淡入淡出」等等。 ?..「

1

試試這個:

r"\{\\fade?\((\d{1,4}),(\d{1,4})\)\}" 

e?是一個可選e 的方式你現在匹配{\fadfade(0000,0000)}

相關問題