[解決済み] 正規表現 グループの複数のマッチにアクセスするには?重複
2023-03-30 06:43:50
質問
私はかなり複雑な正規表現をまとめています。式の一部は、'+a'、'-57' などの文字列にマッチします。a + または a - の後に任意の数の文字または数字が続きます。このパターンに一致する0個以上の文字列にマッチさせたいと考えています。
これが私が思いついた式です。
([\+-][a-zA-Z0-9]+)*
このパターンで文字列 '-56+a' を検索すると、2つのマッチが得られると予想されます。
+a と -56
しかし、最後のマッチしか返ってきません。
>>> m = re.match("([\+-][a-zA-Z0-9]+)*", '-56+a')
>>> m.groups()
('+a',)
pythonのドキュメントを見ると、そうなっていますね。
グループが複数回マッチした場合、最後にマッチしたものだけがアクセス可能です。
>>> m = re.match(r"(..)+", "a1b2c3") # Matches 3 times. >>> m.group(1) # Returns only the last match. 'c3'
そこで質問ですが、どのように を行うかです。 にアクセスできるのでしょうか?
どのように解決するのですか?
を削除します。
*
を削除します (つまり、パターンのちょうど一つのインスタンスにマッチします)。次に
re.findall(...)
または
re.finditer
(参照
はこちら
を参照)で、全てのマッチを返します。
更新しました。
基本的に、あなたは 再帰的降下パーサ . 比較的単純な解析タスクであれば、手作業で行うのが一般的であり、非常に合理的です。ライブラリのソリューションに興味がある場合(たとえば、解析タスクが後でもっと複雑になる可能性がある場合など)、以下を参照してください。 pyparsing .
関連
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] 複数の例外を1行でキャッチする(ブロックを除く)
-
[解決済み] 環境変数の値にアクセスする方法
-
[解決済み] 正規表現における非捕捉グループとは何ですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
-
[解決済み] 辞書のキーと値を交換するにはどうすればよいですか?
-
[解決済み] ファブリック経由でデプロイユーザとしてvirtualenvを有効化する
-
[解決済み] Pythonで、ウェブサイトが404か200かを確認するためにurllibをどのように使用しますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] RegExで複数グループ?
-
[解決済み] Pythonのキャッシュライブラリはありますか?
-
[解決済み] サブフォルダからのインポートモジュール
-
[解決済み] PyQtアプリケーションのスレッド化。QtスレッドとPythonスレッドのどちらを使うか?
-
[解決済み] Pandasを使って、既存のExcelファイルに新しいシートを保存する方法は?
-
[解決済み] Python 言語を決定するには?
-
[解決済み] Pythonでランダムなファイル名を生成する最良の方法
-
[解決済み] djangoのQueryDictをPythonのDictに変更するには?
-
[解決済み] 認証プラグイン 'caching_sha2_password' はサポートされていません。
-
[解決済み] Alembicアップグレードスクリプトでインサートやアップデートを実行するにはどうすればよいですか?