gpt4 book ai didi

c# - 正则表达式简化 - 组太多

转载 作者:太空宇宙 更新时间:2023-11-03 11:38:06 25 4
gpt4 key购买 nike

我正在为 C 风格预处理器编写一个简单的文本采集器。输入文本(示例):

#if 1 > 0
blah
#if defined MACRO1
blah blah blah
#if !defined MACRO2
blaaaah
#if ! defined MACRO3
blah?

我想捕获每个 #if [!] defined 之后的文本陈述。我需要从上面的文本中得到的输出是:

MACRO1
MACRO2
MACRO3

这里需要捕获的行号是3、5、7,注意第7行有空格和制表符混在一起。

我试图创建可以给我这个结果的表达式,但没有一个如此出色。我给出期望结果的表达式是-

(?<=(?<=(?<=(?<=(?<=(?<=#if)[\s\t]+)!?)[\s\t]*)defined)[\s\t]+).*

使用的选项是:Multiline + IgnoreCase

但我敢肯定这不够优雅和简洁。请问谁能推荐更好的表达方式?

PS - 我正在使用 Expresso测试表达式。

最佳答案

这应该有效,因为 s 包含问题中的输入以及换行符等

foreach(var match in Regex.Matches(s, @"(?<=#if\s*!?\s*defined\s*)(?<macro_name>\w+)")) {
Console.WriteLine(match);
}

将找到 MACRO 01、MACRO 02 和 MACRO 03 作为 3 个捕获

关于c# - 正则表达式简化 - 组太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5585770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com