从大字符串C#中提取子字符串?

时间:2014-01-24 09:52:00

标签: c# .net string

我有一个示例字符串数据

string state="This item (@"Item.Price", "item") is sold with an price (@"Item.Rate", "rate") per (@"Item.QTY", "Qty")";

我希望输出为

 string subStr="Item.Price|Item.Rate|Item.QTY"

有人可以建议一些解决方案。我试图从文件中读取这些数据。 我有像

这样的示例代码
if (!string.IsNullOrEmpty(state) && state != null)
       {
            while (state.IndexOf("Value(@\"") > 0)
            {
                int firstindex = state.IndexOf("(@\"");
                int secondindex = state.IndexOf("\", \"");
                if (firstindex > 0 && secondindex > 0)
                {
                    keys.Add(state.Substring(firstindex + 3, secondindex - firstindex - 8));
                    state = state.Substring(secondindex + 3);
                }
            }

        }

当数据很大时,抛出此异常:

 Length cannot be less than zero

有人可以为此建议一些模式匹配机制。

2 个答案:

答案 0 :(得分:4)

var subStr = String.Join("|", Regex.Matches(state, @"@\""([\w\.]+)\""")
                                .Cast<Match>()
                                .Select(m => m.Groups[1].Value));

subStr将为Item.Price|Item.Rate|Item.QTY

答案 1 :(得分:0)

试试这个

string state="This item (@\"Item.Price\", \"item\") is sold with an price (@\"Item.Rate\", \"rate\") per (@\"Item.QTY\", \"Qty\")";

var regex=new Regex("\\(@\"(?<value>.*?)\",");

string.Join(
           "|",
            regex.Matches(state).Cast<Match>().Select(m => m.Groups["value"].Value)
           );