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 に答える