さまざまな人によって書き起こされたいくつかのテレビ エピソードを解析しています。つまり、さまざまな形式を検索する必要があります。たとえば、新しいシーンは次の 2 つの方法のいずれかで示されます。
[A coffee shop]
また
INT. Coffee shop - NIGHT
現在、これを Python の次の正規表現と照合します。
re.findall("(^\[(.+?)\]$)|(^[INTEXT]{3}\. .+?$)", text)
ここで、「テキスト」はスクリプト全体のテキストです (したがって、を使用しますfindall
)。これは常に独自の行に表示されるため、^$
これは私に次のようなものを与えます:(None, None, "INT. Coffee Shop - NIGHT")
例えば。
私の質問:|
正規表現を作成して、表記法を使用して、2 つの複雑なパターンのいずれかを検索し、実際には必要のない部分一致を作成する方法を教えてください。それとももっと良い方法がありますか?
どうもありがとう。
更新: 非キャプチャ グループのアイデアを見落としていました。私が望むものを達成することができます:
"(?:^\[.+?\]$)|(?:^[INTEX]{3}\. .+?$)"
しかし、これは新たな問題を提起します。私は実際にはシーンにブラケットや INT/EXT を必要とせず、場所だけを必要とします。非キャプチャ グループ内で実際のグループを使用できると考えましたが、次のように、他の式に対してまだ空白の一致を取得しています。
import re
pattern = "(?:^\[(.+?)\]$)|(?:^[INTEX]{3}\. (.+?)$)"
examples = [
"[coffee shop]",
"INT. COFFEE SHOP - DAY",
"EXT. FIELD - NIGHT",
"[Hugh's aparment]"
]
for example in examples:
print re.findall(pattern, example)
'''
[('coffee shop', '')]
[('', 'COFFEE SHOP - DAY')]
[('', 'FIELD - NIGHT')]
[("Hugh's aparment", '')]
'''
それらだけでも構いjoin()
ませんが、もっと良い方法はありますか?