c# - .NET正则表达式识别 `if .. then .. else .. endif`

标签 c# regex

我需要两个正则表达式来识别if .. then .. else .. endif节及其部分。

来自如下表达式:

示例 1:

5 + 10 * (if (4 + 4.5) > 0 then 20 else 45 endif) + 2

示例 2:

if (20 == 10) then 10 endif

示例 3:

if (20/10 != 2) then (2 * 10) else (3 * 4) endif

预期结果:

  1. 可以给我 if..endif 的正则表达式参与表达 对于前。从示例 1 我应该收到 if (4 + 4.5) > 0 then 20 else 45 endif分别

  2. 可以给我 if..endif 的正则表达式部分。 对于前。从示例 1 我应该收到:

左比较器:(4 + 4.5)
接线员:>
右比较器:0
然后部分:20
其他部分:45 (可以为 null 或 string.Empty)

注意事项:

  1. else是可选的。
  2. if..endif可以是唯一的表达式,也可以是表达式的一部分。
  3. then & else可以有一个表达式或一个静态值。
  4. 可以在 if 条件中使用的条件运算符是 >, <, ==, !=, >=, <=
  5. 正则表达式应该在 C# 应用程序 中工作。

最佳答案

正则表达式不太适合这种工作,因为你可以嵌套 if/then/else 并且因为可能变体(例如缺少 else);正则表达式将是巨大的,并且需要大量的工作来平衡每次捕获的贪婪/懒惰。扫描每个字符并生成您随后可以解释的表达式树会容易得多。正则表达式更适合格式已知或几乎没有变化的文本解析。

编辑

想了想,其实也没那么难:

if(*.*?*)then(*.*?*)(?:else(*.*?*))?endif

每个捕获组包含组件:

  1. 条件
  2. 真值
  3. false 值(仅当存在 else 时)

我不保证准确性,因为它不适用于嵌套的 if 表达式,但对于您的需要它应该足够了。

关于c# - .NET正则表达式识别 `if .. then .. else .. endif`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3643891/

相关文章:

regex - 如何在正则表达式中检测数字前的字符

javascript - 通过 javascript 正则表达式验证 SoundCloud URL

javascript - Javascript 中的正则表达式删除链接

python - 是否可以在 Markdown 中替换 token ?

c# - 从结构化数据构建 JSON 层次结构

c# - 如何在 AWS CDK PolicyStatement AddAction 方法中嵌套键值对?

c# - (Euclidean Shortest Path) 检测平面内障碍物的角点

c# - 打开的文件太多(Ubuntu 上的 Mono .NET)

c# - 如何使用 GroupBy() 对多个项目进行分组?

java - 从java字符串中高效提取数字(已经尝试过 Guava 和正则表达式)