gpt4 book ai didi

c# - .net System.Text.RegularExpressions 在正则表达式中嵌套正则表达式

转载 作者:太空宇宙 更新时间:2023-11-03 13:32:34 24 4
gpt4 key购买 nike

我想问任何熟练的 .net 开发人员,是否有可能定义正则表达式(使用 .net RegularExpressions 命名空间 cpabilities),这将包括对另一个正则表达式的引用。我想描述语法规则,每个规则都是一个正则表达式。最终的正则表达式将是语法的开始符号。

当然我可以对单行正则表达式进行扩展,但可读性会受到影响。我也不想以编程方式尝试包含在开始符号中的每个选项(如 foreach(regexp r in line.regexps) {check if r.matches(input)} )。

例如,以类似 regexp 的形式具有以下类似 ini 的文件语法(不遵循 Microsoft regexp 规则,仅遵循一般规则):

sp           = \s*
allowed_char = [a-zA-Z0-9_]
key = <allowed_char>+
value = <allowed_char>((<allowed_char>|[ ])*<allowed_char>)?
comment = (;|(//)|#)(.*)

empty_line = ^<sp>$
line_comment = ^<sp><comment>$
section = ^<sp>\[<sp><value><sp>\]<sp>(<comment>)?$
item = ^<sp><key><sp>=<sp><value><sp>(<comment>)?$

line = <empty_line>|<line_comment>|<section>|<item>

我想:

  • 检查一个句子是否是语言的一部分(真/假)——看起来微不足道:匹配 <line>开始符号。
  • 访问类似终端的符号值(例如 <section><key><value>... )——我想这可以通过命名匹配组(或者它到底叫什么——仍然需要在 msdn 上阅读一些详细信息)。
  • 我不希望你写代码,只要你能给我一些提示,无论是否可能(以及如何),因为我还没有找到这个信息。所有示例均针对单个正则表达式匹配。

谢谢。

最佳答案

这是我在做我自己的基于正则表达式的数学表达式解析器时想到的:

private static class Regexes {
// omitted...
private static readonly string
strFunctionNames = "sin|ln|cos|tg|tan|abs",
strReal = @"([\+-]?\d+([,\.]\d+)?(E[\+-]?\d+)?)|[\+-]Infinit(y|o)",
strFunction = string.Format( @"(?<function>{0})(?<argument>{1})",
strFuncitonNames, strReal );

// omitted...
public static readonly Regex
FunzioniLowerCase = new Regex( strFunctionNames ),
RealNumber = new Regex( strReal ),
Function = new Regex( strFunction );
}

这有一个明显的缺点,即代码中存在某种重复,但您可以使用反射在静态构造函数中编译(甚至可能创建)这些正则表达式。

关于c# - .net System.Text.RegularExpressions 在正则表达式中嵌套正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20004564/

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