c# - 在评论中提取带括号的枚举?
问题描述
我要提取的枚举如下:
...
other code
...
enum A
{
a,
b=2,
c=3,
d//{x}
}
...
More Enums like the above.
...
首先,我尝试使用Singleline
带有正则表达式的选项:
enum\s*\w+\s*{.*?\}
但是,由于注释有括号。正则表达式不起作用。当它运行到评论中的括号时它将停止。
所以我尝试在评论后排除括号。根据我到目前为止搜索的内容,似乎我需要对分组构造进行负面展望Multiline
。
然后我尝试在没有注释的情况下解析括号。
子步骤是在注释后找到括号:
(?m:^.*?//.*?}.*?$)
.
但是,即使在内联多行模式下,似乎.
仍然匹配任何字符,包括换行符。
然后我首先尝试使用多行。由于主要问题是评论中的括号。我尝试过:
(?!//.*)}
负面展望没有按我预期的方式工作。
这是一个csharp-regex-test-link供您测试。
总而言之,我需要从 csharp 源代码文件中解析枚举。
我的主要问题是评论中的括号。
编辑:澄清
1.评论中的括号是成对的。例如:
xxx=xxx; //{xx}
2.comments 的形式只有//
3.我不能依赖缩进。
解决方案
您可以使用
@"\benum\s*\w+\s*{(?>[^{}]+|(?<o>){|(?<-o>)})*(?(o)(?!)|)}"
查看正则表达式演示
细节
\benum
- 一个完整的词enum
\s*
- 0+ 个空格\w+
- 1+字字符\s*
- 0+ 个空格{
- 一个{
字符(?>[^{}]+|(?<o>){|(?<-o>)})*
{
- 除and之外的 1+ 个字符}
,或{
带有空字符串的 a 被压入组o
堆栈,或}
带有从组o
堆栈中弹出的值(?(o)(?!)|)
- 如果 Group仍有任何项目留在堆栈中,则条件yes-no
构造使匹配失败并使正则表达式引擎回溯到当前位置o
}
- 一个}
字符。
推荐阅读
- python - 使用月份日期时间合并多个数据框
- c# - 使用 Ingress 提供的证书在 Kubernetes 中提供 HTTPS 的 ASP.net Core OData
- dialogflow-es - 在将请求发送到完整端点之前在 js 中编辑请求
- angular - 使用 onclick 菜单项在 ngb-tab 中显示我的组件
- javascript - 如何访问和使用 redux-form 上子组件的值以使复选框工作并启用有条件渲染的额外选项
- docker - 向外部用户打开 docker daemon 命令错误
- mongodb - 向模式添加方法时打字稿和 MongoDB 类型擦除
- linker - COMDAT 部分没有符号
- reactjs - 根据 Props.Children 中的值进行条件样式
- javascript - 无法从使用外来对象在画布中绘制的 svg 中提取“base 64”