这是RegEx Pattern的固定代码。这完全正常。我想从XML文件中获得相同的格式。每次我都无法编辑代码,所以只有我尝试使用这种方法。
Regex[] regPatterns = { new Regex(@"\[(.*?)\]"),
new Regex(@"\'_(.*?)\'")
};
示例XML就在这里
<?xml version="1.0" encoding="utf-8" ?>
<RegExPattern>
<Pattern name="DateFormat">
@"\[(.*?)\]"
</Pattern>
<Pattern name="NumberFormat">
@"\d+"
</Pattern>
</RegExPattern>
示例C#代码在这里
regPatterns = ReadRegExPatterns();
private Regex[] ReadRegExPatterns()
{
using (XmlReader reader = XmlReader.Create("RegExFormats.xml"))
{
while (reader.Read())
{
if (reader.IsStartElement())
{
switch (reader.Name)
{
case "Pattern":
if (reader.Read())
{
//Error Line
regPatterns = new Regex(reader.Value.Trim());
}
break;
}
}
}
}
return regPatterns;
}
我转而使用regex []格式,帮助我。
答案 0 :(得分:0)
首先,你没有在方法中定义regPatterns
变量,你需要定义它,并且因为你正在做return regPatterns
,它需要与返回相同的类型您的方法(Regex[]
)。
但是创建一个返回数组的方法是一个相对糟糕的想法(它通过提供实现的细节来破坏封装),最好返回一个IEnumerable,它就是“to-go”类在.Net中返回一些东西的时候。
添加了奖励,它可以使用yield关键字轻松实现您的方法:
private IEnumerable<Regex> ReadRegExPatterns()
{
using (XmlReader reader = XmlReader.Create("RegExFormats.xml"))
{
while (reader.Read())
{
if (reader.IsStartElement())
{
if (reader.Name == "Pattern")
{
if (reader.Read())
{
yield return new Regex(reader.Value.Trim());
}
}
}
}
}
}
希望这有帮助。