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

问题描述 投票:0回答:1

我的正则表达式模式远程存储在XML文件中。我想在运行时动态添加它们到我的应用程序。

相关代码如下:

//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);

当我做静态variante它工作:

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

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

c# regex xml
1个回答
0
投票

我刚刚测试了你的代码片段,正则表达式本身似乎有效。

我假设你的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));
}
© www.soinside.com 2019 - 2024. All rights reserved.