C# 分道扬镳;然后on=,使用String.Split时出现问题,需要正则表达式

C# 分道扬镳;然后on=,使用String.Split时出现问题,需要正则表达式,c#,regex,C#,Regex,我需要将上面的行拆分2次,第一次是逗号字符;第二次在=符号上 它不能正常工作,因为值部分也有=符号 我的代码无法正常工作,因为它假设值部分没有“=”符号,并且没有使用regex simply String.Split(“=”) 有人能帮我处理正则表达式吗?我在键/值的周围加了双引号,以帮助把事情分开。你能做的是,你可以使用IndexOf来获取第一个=的索引 "key1"="value1 http://www.example.com?a=1";"key2"="value2 http://www.e

我需要将上面的行拆分2次,第一次是逗号字符;第二次在=符号上

它不能正常工作,因为值部分也有=符号

我的代码无法正常工作,因为它假设值部分没有“=”符号,并且没有使用regex simply String.Split(“=”)


有人能帮我处理正则表达式吗?我在键/值的周围加了双引号,以帮助把事情分开。

你能做的是,你可以使用
IndexOf
来获取第一个
=
的索引

"key1"="value1 http://www.example.com?a=1";"key2"="value2 http://www.example.com?a=2";
然后可以使用
字符串.Substring
来获取键和值

int i = myStr.IndexOf('=');

您可以做的是,您可以使用
IndexOf
来获取第一个
=

"key1"="value1 http://www.example.com?a=1";"key2"="value2 http://www.example.com?a=2";
然后可以使用
字符串.Substring
来获取键和值

int i = myStr.IndexOf('=');

我没有使用正则表达式,但您可以执行以下操作:

string key = myStr.Substring(0, i)

string value = myStr.SubString(i+1);

我没有使用正则表达式,但您可以执行以下操作:

string key = myStr.Substring(0, i)

string value = myStr.SubString(i+1);

你的正则表达式应该是这样的

        string test =@"""key1""=""value1 http://www.example.com?a=1"";""key2""=""value2 http://www.example.com?a=2""";

        string[] arr = test.Split(';');

        foreach (string s in arr)
        {
            int index = s.IndexOf('=');
            string key = s.Substring(0, index);

            string value = s.Substring(index+1, s.Length - index);
        }
遗憾的是,我不知道
C#
,但这应该适用于每种语言。要获得结果,您必须为每个匹配项选择:

"(.+?)"="(.+?)"

你的正则表达式应该是这样的

        string test =@"""key1""=""value1 http://www.example.com?a=1"";""key2""=""value2 http://www.example.com?a=2""";

        string[] arr = test.Split(';');

        foreach (string s in arr)
        {
            int index = s.IndexOf('=');
            string key = s.Substring(0, index);

            string value = s.Substring(index+1, s.Length - index);
        }
遗憾的是,我不知道
C#
,但这应该适用于每种语言。要获得结果,您必须为每个匹配项选择:

"(.+?)"="(.+?)"

使用
String.Split
StringSplitOptions.removeMptyEntries
以及带分隔符的字符串数组

group(1) as keys
group(2) as values

结果={string[4]} [0]:“键1” [1] :“价值1http://www.example.com?a=1" [2] :“键2” [3] :“价值2http://www.example.com?a=2"
我使用以下分隔符(包括双引号):

“;”

“=”


使用
String.Split
StringSplitOptions。删除mptyentries
和带有分隔符的字符串数组

group(1) as keys
group(2) as values

结果={string[4]} [0]:“键1” [1] :“价值1http://www.example.com?a=1" [2] :“键2” [3] :“价值2http://www.example.com?a=2"
我使用以下分隔符(包括双引号):

”;“

“=”

使用
字符串.Split(char[],int)
重载(http://msdn.microsoft.com/en-us/library/c1bs0eda.aspx). 第二个参数将限制要返回的子字符串的数量。如果知道字符串始终至少有1个等号(键/值对),则将第二个参数设置为2

result = {string[4]} [0]: "key1" [1]: "value1 http://www.example.com?a=1" [2]: "key2" [3]: "value2 http://www.example.com?a=2" - 结果:

使用
String.Split(char[],int)
重载(http://msdn.microsoft.com/en-us/library/c1bs0eda.aspx). 第二个参数将限制要返回的子字符串的数量。如果知道字符串始终至少有1个等号(键/值对),则将第二个参数设置为2

result = {string[4]} [0]: "key1" [1]: "value1 http://www.example.com?a=1" [2]: "key2" [3]: "value2 http://www.example.com?a=2" - 结果:


您还可以尝试对多个令牌使用Split方法 在这里,这将为您提供一个字符串[],其中包含根据您的令牌拆分的多个值

如果你想删除空条目,你也可以这样做

Key: key1, Value: value1 http://www.example.com?a=1
Key: key2, Value: value2 http://www.example.com?a=2
结果

string strValue = @"""key1""=""value1 http://www.example.com?a=1"";""key2""=""value2 http://www.example.com?a=2""";
string[] strSplit = strValue.Split(new string[] { "\";\"", "\"=\"", "\"" }, StringSplitOptions.RemoveEmptyEntries);

您还可以尝试对多个令牌使用Split方法 在这里,这将为您提供一个字符串[],其中包含根据您的令牌拆分的多个值

如果你想删除空条目,你也可以这样做

Key: key1, Value: value1 http://www.example.com?a=1
Key: key2, Value: value2 http://www.example.com?a=2
结果

string strValue = @"""key1""=""value1 http://www.example.com?a=1"";""key2""=""value2 http://www.example.com?a=2""";
string[] strSplit = strValue.Split(new string[] { "\";\"", "\"=\"", "\"" }, StringSplitOptions.RemoveEmptyEntries);

您需要匹配而不是拆分文本

strSplit    {string[4]} string[]
[0] "key1"  
[1] "value1 http://www.example.com?a=1"
[2] "key2"  
[3] "value2 http://www.example.com?a=2"
var-keys=Regex.Matches(您的字符串,“(.*?”=”)*(http.*?“;”).Cast()。选择(x=>
新的
{
key=x.Groups[1]。值,
value=x.Groups[2]。value
}
);
foreach(键入键)
{
key.key;//键值
key.value;//值
}

您需要匹配而不是拆分文本

strSplit    {string[4]} string[]
[0] "key1"  
[1] "value1 http://www.example.com?a=1"
[2] "key2"  
[3] "value2 http://www.example.com?a=2"
var-keys=Regex.Matches(您的字符串,“(.*?”=”)*(http.*?“;”).Cast()。选择(x=>
新的
{
key=x.Groups[1]。值,
value=x.Groups[2]。value
}
);
foreach(键入键)
{
key.key;//键值
key.value;//值
}

“我在两个键/值周围添加了双引号,以帮助将它们分开”
那么双引号通常不在那里吗?当你说“逗号”时,我认为你的意思是“分号”。你提供了“给定”;什么是“预期”?尝试将此工具与上述值一起使用。然后,您可以使用正则表达式,直到它给出所需的值。请输入您的问题,您的预期结果应该是什么样的这将使某人更容易提供足够的建议/帮助
“我在两个键/值周围添加了双引号,以帮助将事情分开”
所以双引号通常不存在吗?当你说“逗号”时,我想你的意思是“分号”。你提供了“给定”;什么是“预期”?尝试将此工具与上述值一起使用。然后,您可以使用正则表达式,直到它提供所需的值。请在您的问题中输入您的预期结果应该是什么样子。这将使某人更容易提供足够的建议/帮助。个人而言,Chris Gessler的示例运行良好,并且它利用了.NET已内置的功能,特别是在您不太熟悉的情况下舒适地使用regexpernally Chris Gessler的示例工作得很好,它利用了.NET已经内置的功能,特别是当您不太习惯使用RegExThe
String.Split(char[],int)
重载为您完成了所有的
IndexOf/Substring
功能。
String.Split(char[],int)
重载为您完成了所有的
IndexOf/Substring
功能。为什么2,第一个=符号很重要不,第二个在url中,应该忽略。否?@user1361315-因为count参数是要返回的最大子字符串数。关键是子串1,所有元素都在第一个等号的左边。第一个等号右边的所有东西都是子串2。为什么2,第一个=号才是重要的