5

好的,所以我已经看到了其他问题,但我遇到了一个独特的问题。我必须以二进制模式打开文件才能读取它(我不太明白为什么,但它可以工作)。我可以轻松地打印出文件的行没问题。但是当我尝试使用 查找特定行时re.search,我遇到了问题,因为我有一个字符串模式和字节对象。这是我到目前为止所拥有的:

input_file = open(input_file_path,  'rb',  0)

for line in input_file:
    if re.search("enum " + enum_name,  line, 0):
        print("Found it")
        print(line)
        exit()

enum_name 是用户输入,所以我真的需要知道如何在搜索以二进制模式打开的文件时同时使用字符串和变量(或者如何以非二进制模式打开此文件,我得到了不能拥有非二进制模式下的无缓冲文本 I/O 错误)。我已经尝试为搜索二进制文件制作我的模式,但是当我这样做时我不知道如何处理该变量。

4

2 回答 2

3

您需要在正则表达式中使用字节字符串作为模式,如下所示应该可以:

if re.search(b"enum " + enum_name.encode('utf-8'), line):
    ...

这里enum_name.encode('utf-8')用于将用户输入转换为bytes对象,根据您的环境,您可能需要使用不同的编码。

请注意,如果您的正则表达式真的这么简单,那么您可能只使用子字符串搜索来代替。

于 2012-07-20T19:02:18.513 回答
1

你不需要重新。尝试

if "enum " + enum_name in line:

用“b”阅读主要是关于行尾。

于 2012-07-20T19:02:40.800 回答