【发布时间】:2023-03-06 14:50:01
【问题描述】:
我有一个来自 INI 文件的字符串,如下所示。
string inistr = "[sectionA]KeyName_1=10.01\r\nKeyName_2=20.2\r\nKeyName_3=15.6\r\n[sectionB]KeyName_4=10.01\r\nKeyName_5=20.2\r\nKeyName_6=15.6\r\n"
然后我首先尝试通过正则表达式分成 2 个部分,我尝试了这个正则表达式并从here 得到以下结果。
接下来,我开始用C#尝试,用Regex.Matches来实现。
var sections = Regex.Matches(inistr, @"^\[.*\](\r|\n|\r\n)[a-zA-Z0-9_=.\r\n]*");
if(sections.Count != 0)
{
foreach(var sect in sections)
Console.WriteLine(sect.ToString());
}
else
Console.WriteLine("Cannot Find Any Section...");
但是,我发现它无法通过正则表达式模式找到任何部分。
然后我发现如果我不使用'^',模式可以得到部分,如下所示。
//var sections = Regex.Matches(inistr, @"^\[.*\](\r|\n|\r\n)[a-zA-Z0-9_=.\r\n]*");
var sections = Regex.Matches(inistr, @"\[.*\](\r|\n|\r\n)[a-zA-Z0-9_=.\r\n]*");
但我不知道为什么如果我使用 '^' 它不能捕获部分。
为什么 C# 和 here 的结果不同?
【问题讨论】:
-
您的在线工具使用的是正则表达式的 PHP 变体,这与 C# 变体不同。如果你想测试一个正则表达式,你需要使用一个 .NET 兼容的工具。查看副本。
-
我试过你的代码,但不管
^是否存在,都不匹配。为什么不使用一些ini包来解析呢?