【发布时间】:2017-09-22 20:37:47
【问题描述】:
我正在尝试在 C# 中创建一个简单的正则表达式来将字符串拆分为标记。我遇到的问题是我使用的模式捕获了一个空字符串,这会抛出我的预期结果。我可以做些什么来更改我的正则表达式,使其不捕获空字符串?
var input = "ID=123&User=JohnDoe";
var pattern = "(?:id=)|(?:&user=)";
var tokens = Regex.Split(input, pattern, RegexOptions.IgnoreCase);
// Expected Results
// tokens[0] == "123"
// tokens[1] == "JohnDoe"
// Actual Results
// tokens[0] == ""
// tokens[1] == "123"
// tokens[2] == "JohnDoe"
【问题讨论】:
-
链接不回答 OP - 它依赖于 .NET 核心中不存在的 System.Net.Http 静态方法
-
@WiktorStribiżew 绝对指出了一种更好的方法。您的查询字符串在语义相同的输入
"User=JohnDoe&ID=123"上会失败,因为您在正则表达式中检查了&。最好不要在这个上重新发明轮子。 -
有几种方法可以解决这个问题。 1)Remove empty items,2)使用
(?i)(?<=id=)[^&]+获取id,(?i)(?<=user=)[^&]+获取用户名,3)等等