1

これを解決できないことに少し不満を感じていますが、不明な量の単語 (いくつかのスペース、いくつかの数字、いくつかのアンダースコア) を選択する正規表現を定義したいと考えています。

「不明な量の単語」と言うとき、それがより現実的であれば、喜んで 10 に制限します。基本的に私はファイル名をスキャンしており、10 語を超えているとは思いませんが、制限を設定する必要がないのは良いことです。

私がこれまでに持っている最高のものは次のとおりです。

tc = re.findall(r'FROM CLIP NAME:\s\s(\w*\s*\w*\s*\w*\s*\w*\s*\w*\s*\w*\s*\w*\s*\w*\s*\w*\s*\w*)', text)

'FROM CLIP NAME:\s\s' は各行の先頭になります。

\s は改行とスペースを読み取り、次の行からデータを取得するため、上記の私の試みは完全に失敗しました。

4

2 に答える 2

3
FROM CLIP NAME:\s{2}([\w\s]*)$

文字クラスを使用して、許可される文字 ( や などの事前定義された文字クラスである場合もあります\w)を定義\sし、任意の数を受け入れることができます。そうすれば、何が含まれるかはあまり気にしません。ドット.を使用して、文字通りにでも一致させることもできます。

末尾$は、正規表現が最後に行末を要求するようにします。行ベースの動作の場合、正規表現にフラグ$を使用する必要があることに注意してください。そうしないと、文字列の末尾に一致します。re.M$

re.compile('FROM CLIP NAME:\s{2}([\w\s]*)$', re.M)

あなたの場合FROM CLIP NAME:、静的なプレフィックスの場合は、正規表現を使用しないでください。eumiroが示したように、行を繰り返して接頭辞を取り除くだけです。

于 2012-12-11T11:37:58.687 に答える
2

正規表現を使わないのはどうですか?

行が で始まるかどうかを確認してから、"FROM CLIP NAME: "この先頭を切り取り、残りの文字列を返します。

title = "FROM CLIP NAME:  "
for line in lines:
    if line.startswith(title):
        tc = line[len(title):]

これは行を反復するため、line常に改行までのみ実行されます。

行のリスト (またはファイル オブジェクト) がなく、代わりにテキストがある場合は、for line in text.splitline().

于 2012-12-11T11:31:02.087 に答える