1

いくつかの構造体定義を含むヘッダーファイルがあります。このファイルから特定の構造体を抽出したいと思います。たとえば、2番目の構造体のみを取得する必要があります。

typedef struct {
  int a;
  int b;
} first;

typedef struct {
  int x;
 int y;
} second;

式の下

...
headerText = headerFile.read()
re.match(r"typedef struct {(.*)} second;", headerText) 
...

戻り値

int a;
  int b;
} first;

typedef struct {
  int x;
  int y;

2番目の構造体のみを取得するにはどうすればよいですか?ありがとう...

4

1 に答える 1

1

これを使用してください..を他の必要な構造体名regexに置き換えるだけですsecond

[グループなし]

グループが必要ない場合は、この正規表現を使用してください

typedef struct(?!.*?typedef struct).*?\}.*?\bsecond\b.*?;

上記の正規表現typedef structは、後に別の正規表現が続かない、typedef structつまり(?!.*?typedef struct)..これは、複数の構造体がキャプチャされないようにするために行われます


【グループで】

(?:^|\;).*(typedef struct.*?\}.*?\bsecond\b.*?;)

基本的に、上記regexはファイルの先頭にある構造体と一致するか、ステートメントターミネータの後に必要な構造体と一致し;ます..つまり、これは、他の構造体定義が結果に含まれないようにするために行われます..

(?:^|\;)文字列または a の先頭に一致;し、グループに取り込まれない

.*貪欲に0から多くの文字に一致

(typedef struct.*?\}.*?\bsecond\b.*?;)構造体と一致するようになりました

.*?遅延して0 から多数の文字に一致します

Group1必要な構造体ができました

于 2012-11-06T12:01:19.767 に答える