用于在Python中查找括号的正则表达式

时间:2012-12-25 05:41:21

标签: python regex

我试图找到大写字母的所有匹配,然后是括号,即A),B),C)等。我通过重试(http://re-try.appspot.com/进行了测试) )它完美地工作,但是当我在我的程序中实现它时,它给了我一个错误消息:sre_constants.error:不平衡的括号

parens = re.findall(r'[A-Z]\)', test_file)

似乎忽略了转义字符,但为什么呢? 任何帮助或替代方法将不胜感激。

2 个答案:

答案 0 :(得分:2)

这有效:

>>> st='first A) you have B) and then C)'
>>> re.findall(r'[A-Z]\)',st)
['A)', 'B)', 'C)']

或:

>>> re.findall('[A-Z]\\)',st)
['A)', 'B)', 'C)']

test_file实际上是一个字符串吗?你有什么应该工作(在Python shell中尝试),所以我的怀疑是你re.findall的第二个参数......

如果你的命名建议,它是一个文件对象,你需要这样做:

with open('file.txt','r') as f:
    for line in f:
        line_matches=re.findall(pattern,line)
        ... do something with a list of matches from that line
        ... next line

或者,对于整个文件

with open('file.txt', 'r') as f:
    contents=f.read()
    file_matches=re.findall(pattern,contents,flags=re.MULTILINE)
    ... do something with a list of matches from the whole file

或者,该文件的编码可能是错误的......

答案 1 :(得分:0)

正则表达式很好,问题可能是test_file的编码。

选中此Python Unicode Regular Expression以查看是否有任何帮助。