gpt4 book ai didi

c# - 匹配和替换函数表达式

转载 作者:行者123 更新时间:2023-11-30 23:25:21 25 4
gpt4 key购买 nike

我需要对 C#(实际上是 transpiled Razor code)进行一些非常简单的解析,以用文本替换替换函数调用列表。

如果给定一个包含 {"Foo.myFunc" : "\"def\"" } 的集合它应该替换此代码:

var res = "abc" + Foo.myFunc(foo, Bar.otherFunc( Baz.funk()));

用这个:

var res = "abc" + "def"

我不关心嵌套表达式。

这看起来相当微不足道,我认为我应该能够避免为映射集的每个成员使用类似这样的东西来构建整个 C# 解析器:

  • 找到表达式开始(例如 Foo.myFunc )
  • Push()/Pop() Stack 上的括号直到 Count == 0 .
  • 将此标记为表达式停止
  • 替换从表达式开始到表达式停止的所有内容

但也许我不需要...是否有(可能是内置的).NET 库可以为我做这件事?计数在 RE 所在的语言家族中是不可能的,但也许 C# 中的扩展正则表达式语法可以使用反向引用以某种方式处理这个问题?

编辑:作为对 this answer 的评论演示简单地计算括号通常是不够的,如 trollMe("(")将摆脱那些算法。我猜只有真正的解析就足够了(?)。

最佳答案

普通字符串的技巧是:

(?>"(\\"|[^"])*")

逐字字符串:

(?>@"(""|[^"])*")

也许这会有所帮助,但我不确定这是否适用于所有情况:

<func>(?=\()((?>/\*.*?\*/)|(?>@"(""|[^"])*")|(?>"(\\"|[^"])*")|\r?\n|[^()"]|(?<open>\()|(?<-open>\)))+?(?(open)(?!))

替换<func>用你的函数名。

没用说trollMe("\"(", "((", @"abc""de((f")按预期工作。

DEMO

关于c# - 匹配和替换函数表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37313769/

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