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 文件动态添加正则表达式模式的主要内容,如果未能解决你的问题,请参考以下文章
c# 中用于文件夹路径验证(远程路径、FTP 路径、本地系统文件夹路径等)的单个正则表达式 [关闭]
C# - 正则表达式匹配模式、替换和捕获行号 [来自 Txt 文件]