3

我正在尝试查找大写字母后跟括号的所有匹配项,即 A)、B)、C) 等。我通过重试 (http://re-try.appspot.com/) 对其进行了测试完美运行,但是当我在我的程序中实现它时,它给了我一条错误消息: sre_constants.error: unbalanced parenthesis

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

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

4

2 回答 2

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

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

于 2012-12-25T05:50:03.153 回答
0

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

检查此Python Unicode 正则表达式以查看是否有帮助。

于 2012-12-25T06:04:09.960 回答