c# 从远程 XML 文件动态添加正则表达式模式

Posted

技术标签:

【中文标题】c# 从远程 XML 文件动态添加正则表达式模式【英文标题】:c# add Regex pattern dynamically from remote XML file 【发布时间】: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\\d6\\b</rule>
</item>

也尝试了引号:

<item>
    <rule>"\\b[A-ZÄÖÜ]1\\d6\\b"</rule>
</item>

在记录和调试之后,我很确定它是以下行:

pattern[ruleIndex] = new Regex(text);

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

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

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

【问题讨论】:

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

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

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

<?xml version="1.0" encoding="utf-8" ?>
<regex>
  <item>
    <rule>\b[A-ZÄÖÜ]1\d6\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"] 每个项目只能返回一个规则。这样,您可以为每个项目设置许多规则,这些规则以前会被计算在内,但不会被导入。

以上是关于c# 从远程 XML 文件动态添加正则表达式模式的主要内容,如果未能解决你的问题,请参考以下文章

XML文件中的C#正则表达式

c# 中用于文件夹路径验证(远程路径、FTP 路径、本地系统文件夹路径等)的单个正则表达式 [关闭]

C# - 正则表达式匹配模式、替换和捕获行号 [来自 Txt 文件]

从输入字符串动态创建正则表达式模式

从给定字符串中提取 url 的 C# 正则表达式模式 - 不是完整的 html url,而是裸链接

js 正则验证正整数