C#:正则表达式
我有一组行数据,如下所示C#:正则表达式,c#,regex,C#,Regex,我有一组行数据,如下所示 List<String> l_lstRowData = new List<string> { "Data 1 32:01805043*0FFFFFFF", "Data 3, 20.0e-3", "Data 2, 1.0e-3 172:?:CRC" ,
List<String> l_lstRowData = new List<string> { "Data 1 32:01805043*0FFFFFFF",
"Data 3, 20.0e-3",
"Data 2, 1.0e-3 172:?:CRC" ,
"Data 6"
};
因此,最后两个列表将包含
KeyList
{ "Data 1" }
{ "Data 3, 20.0e-3" }
{ "Data 2, 1.0e-3" }
{ "Data 6" }
ValueList
{ "32:01805043*0FFFFFFF" }
{ "" }
{ "172:?:CRC" }
{ "" }
场景:
模式中的组
键
应匹配数据
后跟一个整数值,如果存在逗号(,),则匹配下一个字符串,即双值
值
模式中的组
值
应与空白
后的字符串匹配。在第一个字符串中,它应与32:01805043*0FFFFFFF
匹配,但在第三个172:?:CRC
匹配
这是我的示例代码
for (int i = 0; i < l_lstRowData.Count; i++)
{
MatchCollection M = CompiledPattern.Matches(l_lstRowData[i], 0);
KeyList.Add(M[0].Groups["KEY"].Value);
ValueList.Add(M[0].Groups["Value"].Value);
}
请帮我重写我的模式。你的代码对我有效,所以请定义哪些不起作用
此外:
- 以“^”开始regexp,以“^”结束$
- 使用regex.Match()而不是Matches(),因为您知道它只匹配一次
- 我不明白你为什么使用忽略模式空白
- 使用简单逗号代替[,],使用简单空格代替[]
- 使用\s而不是[\t\r\n]
- 如果指定IgnoreCase,则不需要数据|数据|数据或[A-Za-z]
如果你把它清理干净,也许你可以单独解决:)你的代码对我有效,所以请定义什么不起作用
此外:
- 以“^”开始regexp,以“^”结束$
- 使用regex.Match()而不是Matches(),因为您知道它只匹配一次
- 我不明白你为什么使用忽略模式空白
- 使用简单逗号代替[,],使用简单空格代替[]
- 使用\s而不是[\t\r\n]
- 如果指定IgnoreCase,则不需要数据|数据|数据或[A-Za-z]
如果你清理了这个问题,也许你可以单独解决:)我认为一个更简单的正则表达式可以工作:(?data\d(?,[\d.e-]+)(?*)
将匹配你的键和值,只要你也使用RegexOptions.IgnoreCase
标志
您可以在这里看到结果。我认为一个更简单的正则表达式可以工作:(?data\d(?,[\d.e-]+))(?*)
将匹配您的键和值,只要您也使用RegexOptions.IgnoreCase
标志
你可以在这里看到结果。我会针对失败的案例运行匹配,并将其部分分解。(例如,确定“不工作”的含义。)我会针对失败的案例运行匹配,并将其部分分解。(例如,确定“不工作”的含义。)我花了一点时间找到“问题”。在结果中,“:01805043*0FFFFFFF“应该以32开头(例如),“32:01805043*0FFFFFFF”同意上面帖子中的所有内容。此外,为了简化测试,使用诸如Rad正则表达式设计器之类的工具应该是明智的。我花了一点时间找到了“问题”。在结果中,:01805043*0FFFFFFF“应该以32开头(例如),“32:01805043*0fffffffff”“同意上面帖子中的所有内容。此外,为了简化测试,最好使用Rad正则表达式设计器之类的工具。
KeyList
{ "Data 1" }
{ "Data 3, 20.0e-3" }
{ "Data 2, 1.0e-3" }
{ "Data 6" }
ValueList
{ "32:01805043*0FFFFFFF" }
{ "" }
{ "172:?:CRC" }
{ "" }
for (int i = 0; i < l_lstRowData.Count; i++)
{
MatchCollection M = CompiledPattern.Matches(l_lstRowData[i], 0);
KeyList.Add(M[0].Groups["KEY"].Value);
ValueList.Add(M[0].Groups["Value"].Value);
}
KeyList
{ "Data 1 32" } // 32 should be in the next list
{ "Data 3, 20.0e-3" }
{ "Data 2, 1.0e-3" }
{ "Data 6" }
ValueList
{ ":01805043*0FFFFFFF" }
{ "" }
{ "172:?:CRC" }
{ "" }