2013-10-16 39 views
0

我正在嘗試查找字符串中所有開放圓括號的位置。在answer之後,我可以找到字母的位置,但我找不到括號的位置。例如,l = [3, 4],但是當我嘗試查找所有(時,我收到了error: unbalanced parenthesisPython查找字符串中的所有開放圓括號

import re 

s = "(Hello(" 
l = [m.start() for m in re.finditer('l', s)] 
openp = [m.start() for m in re.finditer('(', s)] 

回答

6

在正則表達式中(是一個特殊字符,表示組的開始。要匹配文字(你要麼需要用反斜槓逃避它或把它變成一個字符類:

openp = [m.start() for m in re.finditer(r'\(', s)] 

...或:

openp = [m.start() for m in re.finditer(r'[(]', s)] 

作爲一個更通用的解決方案,可以使用re.escape()來自動轉義字符串,以便字面解釋所有字符。例如:

substr_to_find = '(' 
substr_locs = [m.start() for m in re.finditer(re.escape(substr_to_find), s)] 

正如帝斯曼在評論中指出,在這種情況下你也可以使用一個非常可讀的列表理解,而不是正則表達式:

openp = [i for i, c in enumerate(s) if c == "("] 
+0

對於非正則表達式的方法,我想' [我爲我,我在枚舉(s)如果c ==「(」]'更容易閱讀。 – DSM

+0

@DSM是的,這是顯着更好,謝謝! –

相關問題