我的正则表达式模式远程存储在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(“”)设置了错误的参数?它应该有引号?
我刚刚测试了你的代码片段,正则表达式本身似乎有效。
我假设你的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));
}