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选项