我正在尝试查找字符串中所有开括号的位置。按照这个答案,我可以找到字母的位置,但找不到括号的位置。例如,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)]
在正则表达式(
中是一个特殊字符,表示组的开始。要匹配文字(
,您需要使用反斜杠对其进行转义或将其放入字符类中:
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 == "("]