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

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

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

我的代码不起作用,因为它假设值部分没有“=”符号,并且它不是简单地使用正则表达式 String.Split('=')。

有人可以帮助解决所需的正则表达式吗,我在键/值周围添加了双引号,以帮助将事情分开。

4

7 回答 7

3

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

        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);
        }
于 2012-11-21T17:24:16.323 回答
2

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

string x = "key1=value1 http://www.example.com?a=1;key2=value2 http://www.example.com?a=2;";
char[] equal = new char[1] { '=' };
char[] semi = new char[1] { ';' };
string[] list = x.Split(semi, StringSplitOptions.RemoveEmptyEntries);
foreach (string s in list)
{
    string[] kvp = s.Split(equal, 2);
    Console.WriteLine("Key: {0}, Value: {1}", kvp[0], kvp[1]);
}

- 结果:

Key: key1, Value: value1 http://www.example.com?a=1
Key: key2, Value: value2 http://www.example.com?a=2
于 2012-11-21T17:38:32.220 回答
1

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

var keys= Regex.Matches(yourString,"""(.*?)""=.*?(http.*?)"";").Cast<Match>().Select(x=>
    new
    {
        key=x.Groups[1].Value,
        value=x.Groups[2].Value
    }
);

foreach(key in keys)
{
    key.key;//the key value
    key.value;//the value
}
于 2012-11-21T17:52:00.617 回答
1

那么你能做什么,是你可以IndexOf用来获取第一个索引=

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

然后您可以使用String.Substring获取键和值

string key = myStr.Substring(0, i)

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

以下是有关字符串类的一些文档,您可能会发现它们很有用

于 2012-11-21T17:22:47.460 回答
0

使用String.SplitwithStringSplitOptions.RemoveEmptyEntries和带有分隔符的字符串数组

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

string[] result = s.Split(new string[] { "\";\"", "\"=\"", "\"" },
                           StringSplitOptions.RemoveEmptyEntries);

结果 = {字符串[4]}
    [0]:“key1”
    [1]: "value1 http://www.example.com?a=1"
    [2]:“key2”
    [3]: "value2 http://www.example.com?a=2"

我使用以下分隔符(包括双引号):

";"
"="
"

于 2012-11-21T17:37:04.930 回答
0

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

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

可悲的是,我不知道C#,但这应该适用于每种语言。要获得结果,您必须为每场比赛选择:

group(1) as keys
group(2) as values
于 2012-11-21T17:24:48.507 回答
0

您也可以尝试在此处使用带有多个标记的 Split 方法,这将为您提供一个包含多个值的字符串 [],这些值根据您的标记进行拆分

如果您想删除空条目,您也可以执行这样的代码

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"
于 2012-11-21T17:42:57.880 回答