代码之家  ›  专栏  ›  技术社区  ›  Tobias Alt

c#从远程XML文件动态添加Regex模式

  •  0
  • Tobias Alt  · 技术社区  · 6 年前

    我想在运行时将它们动态添加到我的应用程序中。

    相关代码如下:

    //count length of rules
    countRules = regexFile.DocumentElement.SelectNodes("/regex/item/rule").Count;
    ruleIndex = 0;
    //array of pattern objects
    pattern = new Regex[countRules];
    //allocate regex rules
    foreach (XmlNode node in regexFile.DocumentElement.SelectNodes("/regex/item"))
                {
                    string rule = node["rule"].InnerText;
                    string text = rule;
    
                    pattern[ruleIndex] = new Regex(text);
    
                    //deny increment after last item
                    if (ruleIndex < (countRules-1))
                    {
                        ruleIndex++;
                    }
                }
    

    XML文件包含如下项:

    <item>
        <rule>\\b[A-ZÄÖÜ]{1}\\d{6}\\b</rule>
    </item>
    

    还尝试了引号:

    <item>
        <rule>"\\b[A-ZÄÖÜ]{1}\\d{6}\\b"</rule>
    </item>
    

    在记录和怀疑之后,我很确定这是以下几行:

    pattern[ruleIndex] = new Regex(text);
    

    pattern[ruleIndex] = new Regex("\\b[A-ZÄÖÜ]{1}\\d{6}\\b");
    

    我是否为new Regex(“”)设置了错误的参数?它应该有引号?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Andreas    6 年前

    我刚刚测试了你的代码片段,正则表达式本身似乎也能工作。

    我假设您的XML如下所示(只有一个反斜杠)

    <?xml version="1.0" encoding="utf-8" ?>
    <regex>
      <item>
        <rule>\b[A-ZÄÖÜ]{1}\d{6}\b</rule>
      </item>
    </regex>
    

    不过,你可以短得多:

    var pattern = new List<Regex>();
    foreach (XmlNode node in regexFile.DocumentElement.SelectNodes("/regex/item/rule"))
    {
      pattern.Add(new Regex(node.InnerText));
    }