【问题标题】:c# add Regex pattern dynamically from remote XML filec# 从远程 XML 文件动态添加正则表达式模式
【发布时间】:2019-02-21 14:00:15
【问题描述】:

我的正则表达式模式远程存储在 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);

当我做静态变体时,它会起作用:

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

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

【问题讨论】:

  • 有什么问题?
  • 将 XML 值插入新的 Regex(text) 不起作用。
  • \\ 在字符串中是escape sequence。将 \b[A-ZÄÖÜ]{1}\d{6}\b 放入您的 xaml
  • 天哪,双反斜杠确实是个错误,非常感谢 Christian。如果您愿意,可以将此作为答案。
  • 以前没有带一个反斜杠的版本吗?

标签: c# regex xml


【解决方案1】:

我刚刚测试了你的 sn-p,正则表达式本身似乎可以工作。

我假设你的 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));
}

【讨论】:

  • 正确答案正如上面的 Christian 所说的反斜杠。顺便说一句,我可以在我的模式数组中添加几个规则。只需将规则添加为 XML 项。这是我刚刚测试过的。
  • 如果您要为每个项目添加多个标尺,那将无法正常工作。在最坏的情况下,它甚至不会崩溃,只是没有遵循所有规则。因为 node["rule"] 每个项目只能返回一个规则。这样,您可以为每个项目设置许多规则,这些规则以前会被计算在内,但不会被导入。
猜你喜欢
  • 2021-04-13
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 2020-08-16
  • 2020-04-19
  • 2021-10-23
  • 1970-01-01
相关资源
最近更新 更多