C# 正则表达式匹配枚举主体类型

发布于 2024-09-07 02:15:28 字数 740 浏览 3 评论 0原文

我在文件中有这个枚举定义:

public enum IdentityState
{
    [EnumMember]
    New = 0,
    [EnumMember]
    Normal = 1,
    [EnumMember]
    Disabled = 2
}

{ some other data... }

并且只想匹配这个枚举的主体(在 {} 之间), 我想要的匹配结果是:

{
    [EnumMember]
    New = 0,
    [EnumMember]
    Normal = 1,
    [EnumMember]
    Disabled = 2
}

我制作这样的正则表达式模式:

public enum.*\w.*(?[\S|\s|]+\}{1})

但结果是这样的:

{
    [EnumMember]
    New = 0,
    [EnumMember]
    Normal = 1,
    [EnumMember]
    Disabled = 2
}

{ some other data... }

这不是我所期望的,因为它还包括我不想要的下一个 { some other data } 字符串。我不知道如何让模式在第一个 } 之后停止。

I have this enum defitiion in file:

public enum IdentityState
{
    [EnumMember]
    New = 0,
    [EnumMember]
    Normal = 1,
    [EnumMember]
    Disabled = 2
}

{ some other data... }

And want to match only body of this enum (between {}),
the match result i want is:

{
    [EnumMember]
    New = 0,
    [EnumMember]
    Normal = 1,
    [EnumMember]
    Disabled = 2
}

I make regex pattern like this:

public enum.*\w.*(?<enumBody>[\S|\s|]+\}{1})

but result is this:

{
    [EnumMember]
    New = 0,
    [EnumMember]
    Normal = 1,
    [EnumMember]
    Disabled = 2
}

{ some other data... }

Which is not what i expect because it also include next { some other data } string which i dont want. I dont know how make pattern to stop after first }.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

情释 2024-09-14 02:15:28

使用 ? 使 + 量词变得惰性。您不需要 {1} 部分。

public\s+enum\s+\w+\s*(?<enumBody>\{[\S|\s|]+?\})

Make the + quantifier lazy using ?. You don't need the {1} part.

public\s+enum\s+\w+\s*(?<enumBody>\{[\S|\s|]+?\})
燕归巢 2024-09-14 02:15:28

尝试将 ^ 放在正则表达式的前面。

try putting ^ at the front of your regex.

那支青花 2024-09-14 02:15:28

如果这是整个正则表达式,则惰性量词将起作用,但如果您想防止匹配超出结束大括号,那么最好使用 [^}]:

public enum.*\w.*(?<enumBody>[^}]+})

如果你不想在左大括号之前包含空格,你可以在前面做同样的事情:

public enum[^{]*(?<enumBody>{[^}]+})

A lazy quantifier will work if that's the entire regular expression, but if you want to prevent the match from going past the end brace then it's better to explicitly disallow that character as part of the group by using [^}]:

public enum.*\w.*(?<enumBody>[^}]+})

If you don't want to include whitespace before the open brace, you can do the same thing on the front:

public enum[^{]*(?<enumBody>{[^}]+})
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文