1. ホーム
  2. python

[解決済み] すべての正規表現にマッチするインデックスを見つけるには?

2023-02-24 13:31:56

質問

任意の数の引用文字列を内部に持つ可能性のある文字列を解析しています(私はコードを解析しており、PLY を回避しようとしています)。 私は部分文字列が引用されているかどうかを見つけたいのですが、私は部分文字列のインデックスを持っています。 私の最初の考えは、re を使用してすべてのマッチを見つけ、それらが表すインデックスの範囲を把握することでした。

のような正規表現でreを使用する必要があるように思えます。 \"[^\"]+\"|'[^']+' (のような正規表現では、reを使うべきだと思います(今のところ、トリプルクォートなどの文字列を扱うのは避けています)。 findall()を使うと、マッチした文字列のリストが得られるので、それはある程度良いのですが、インデックスが必要です。

私の部分文字列は次のような単純なものでしょう。 c のようなもので、この特定の c が実際に引用されているかどうかを把握する必要があります。

どのように解決するのですか?

これは、あなたが望むものです: ( ソース )

re.finditer(pattern, string[, flags]) 

文字列中のREパターンに対して、重複しない全てのMatchObjectインスタンスの のインスタンスを返す。文字列は は左から右へスキャンされ、マッチは見つかった順に返されます。空の マッチは,他のマッチの先頭に接触しない限り,結果に含まれます。 の先頭に触れない限り、空のマッチは結果に含まれます。

そして、MatchObjectから開始位置と終了位置を取得することができます。

[(m.start(0), m.end(0)) for m in re.finditer(pattern, string)]