0

我正在尝试查找字符串中所有开括号的位置。按照这个答案,我可以找到字母的位置,但找不到括号的位置。例如,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)]
4

1 回答 1

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 == "("]
于 2013-10-16T19:06:56.687 回答