Regex 如何分离重叠模式

Regex 如何分离重叠模式,regex,Regex,我有一个包含多个结构定义的头文件。 我想从这个文件中提取一个特殊结构。例如 我只需要得到第二个结构 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

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

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;
如何只获取第二个结构?
谢谢…

使用此
regex
。只需将
第二个
替换为任何其他必需的结构名即可

[无分组]

(?:^|\;).*(typedef struct.*?\}.*?\bsecond\b.*?;)
如果您不想要分组,请使用此正则表达式

typedef struct(?!.*?typedef struct).*?\}.*?\bsecond\b.*?;
上述正则表达式匹配的
typedef struct
后面没有另一个
typedef struct
,即
(?!*?typedef struct)
。这样做是为了不捕获多个结构


[与组一起]

(?:^|\;).*(typedef struct.*?\}.*?\bsecond\b.*?;)
基本上,上面的
regex
匹配文件开头的结构,或者匹配语句终止符后的所需结构。即
。这样做是为了结果中不包括其他结构定义

(?:^ |\)
匹配字符串或
的开头且未在组中捕获

*
贪婪地将0匹配到多个字符

(typedef struct.*?\}.*\b second\b.*?;)
现在与您的结构匹配

*?
将0与多个字符进行惰性匹配


Group1
现在有了所需的结构

使用此
regex
。只需将
第二个
替换为任何其他所需的结构名即可

[无分组]

(?:^|\;).*(typedef struct.*?\}.*?\bsecond\b.*?;)
如果您不想要分组,请使用此正则表达式

typedef struct(?!.*?typedef struct).*?\}.*?\bsecond\b.*?;
上述正则表达式匹配的
typedef struct
后面没有另一个
typedef struct
,即
(?!*?typedef struct)
。这样做是为了不捕获多个结构


[与组一起]

(?:^|\;).*(typedef struct.*?\}.*?\bsecond\b.*?;)
基本上,上面的
regex
匹配文件开头的结构,或者匹配语句终止符后的所需结构。即
。这样做是为了结果中不包括其他结构定义

(?:^ |\)
匹配字符串或
的开头且未在组中捕获

*
贪婪地将0匹配到多个字符

(typedef struct.*?\}.*\b second\b.*?;)
现在与您的结构匹配

*?
将0与多个字符进行惰性匹配


Group1
现在有了所需的结构

使用您需要指定的语言using@Fake.It.Til.U.Make.It字体哦,你说得对。我错过了
第二件事
那么你需要使用
[^}]*
使用你需要指定的语言using@Fake.It.Til.U.Make.It字体哦,你说得对。我错过了
第二件事
那么你需要使用
[^}]*
你能解释一下这个表达式吗?这对我来说似乎很复杂。@user1320039请查看编辑。.第二个正则表达式很容易理解,“有组”示例有效,但“无组”示例无效。@user1320039在上面的链接中选择DOTALL选项您能解释一下这个表达式吗?这对我来说似乎非常复杂。@user1320039请查看编辑。.第二个正则表达式很容易理解,“有组”示例有效,但“没有组”示例无效。@user1320039在上面的链接中选择DOTALL选项