Regex返回项,而不是项之间的信息
本文关键字:之间 信息 返回 Regex | 更新日期: 2023-09-27 18:04:21
我的代码:
public void DeserialStream(string filePath)
{
using (StreamReader sr = new StreamReader(filePath))
{
string currentline;
Regex countRegex = new Regex("'"DataType'",'"(?:Count|Net)'"((?!'"DataType'").)*", RegexOptions.Singleline);
while ((currentline = sr.ReadLine()) != null)
{
foreach (Match match in countRegex.Matches(currentline))
{
Console.WriteLine(match.Value);
}
}
}
}
这是我的CSV:
"Date","dd/mm/yyyy"
"ExpirationDate","dd/mm/yyyy"
"DataType","Count"
"Location","Unknown","Variable1","Variable2","Variable3"
"A(Loc3, Loc4)","Unknown","5656","787","42"
"A(Loc5, Loc6)","Unknown","25","878","921"
"DataType","Net"
"Location","Unknown","Variable1","Variable2","Variable3"
"A(Loc3, Loc4)","Unknown","5656","787","42"
"A(Loc5, Loc6)","Unknown","25","878","921"
我想返回下面"DataType","Count"answers"DataType","Net"之间的数据。然而,我的编译器返回术语:"数据类型","计数"answers"数据类型","网络",而不是介于两者之间的数据。我不确定我做错了什么?
您需要从DataType:
中删除:编辑:试试这个正则表达式"'"数据类型'",'"(?:|净计数 )'"((?:(?!'" 数据类型'")。)*)"
这可能是您正在寻找的,尽管您可能需要调整:
'"DataType'",'"(?:Count|Net)'"'n((((?<Location>'"[^'"]*'"),(?<Unknown>'"[^'"]*'"),(?<Var1>'"[^'"]*'"),(?<Var2>'"[^'"]*'"),(?<Var3>'"[^'"]*'"))'n)*)
- 请记住,它不支持正确的CSV解析(将不处理在值中间转义的
"
)。 - 请记住,逗号之间不允许有空格
- 它假设在数据行之后和下一个标题行之前有一个空白行。
- 任何其他可能被遗漏:)-相应地调整(即它可能有额外的捕获组,所以你可能需要调整)。这不是一个完美的解决方案,而是为了让你继续前进。
我认为这个模式将做'"DataType'",'"Count'"(.*?)'"DataType'",'"Net'"
w/s
选项
演示