1

我有一个包含几个结构定义的头文件。我想从这个文件中提取一个特定的结构。例如,我只需要获得第二个结构。

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;

我怎样才能只得到第二个结构?谢谢...

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 回答