引用された文字列(ブラックボックスから記録された航空会社のパイロットの引用)のテキストドキュメントを調べるPython正規表現を書いています。私は次のルールで正規表現を書こうとすることから始めました:
引用符の間にあるものを返します。
シングルで開く場合は、シングルで閉じる場合にのみ戻ります。
ダブルで開く場合は、ダブルで閉じる場合にのみ戻ります。
たとえば、「こんにちは」または「こんにちは」ではなく、「こんにちは」と「こんにちは」を一致させたいと思います。
私は次のようなものを含むテストページを使用します:
CA "Runway 18, wind 230 degrees, five knots, altimeter 30."
AA "Roger that"
18:24:10 [flap lever moving into detent]
ST: "Some passenger's pushing a switch. May I?"
だから私は簡単に始めることにしました:
re.findall('("|\').*?\\1', page)
########## /("|').*?\1/ <-- raw regex I think I'm going for.
この正規表現は非常に予期しない動作をします。
私はそれがするだろうと思った:
- ("|")一重引用符または二重引用符のいずれかに一致し、後方参照/1として保存します。
- 。*?欲張りでないワイルドカードに一致します。
- \1バックリファレンス\1で見つかったものと一致します(ステップ1)。
代わりに、引用符の配列を返しますが、それ以外は返しません。
['"', '"', "'", "'"]
同等の(afaik)正規表現はVIMで問題なく機能するため、私は本当に混乱しています。
\("\|'\).\{-}\1/)
私の質問はこれです:
なぜそれは一致として括弧内にあるものだけを返すのですか?これは、バックリファレンスの理解における欠陥ですか?もしそうなら、なぜそれはVIMで動作するのですか?
そして、Pythonで探している正規表現をどのように書くのですか?
ご協力ありがとうございました!