我试图找到字符串中所有开括号的位置。在answer之后,我能够找到字母的位置,但我找不到括号的位置。例如,l = [3, 4]
,但当我尝试查找所有(
时,我得到error: unbalanced parenthesis
。
import re
s = "(Hello("
l = [m.start() for m in re.finditer('l', s)]
openp = [m.start() for m in re.finditer('(', s)]
答案 0 :(得分: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)]
正如DSM在评论中指出的那样,在这种情况下你也可以使用一个非常易读的列表理解而不是正则表达式:
openp = [i for i, c in enumerate(s) if c == "("]