获得更长字符串的子串的最佳方法

时间:2015-05-08 03:08:37

标签: c# string substring

在c#中提取较长字符串的子字符串的最佳方法是:

String str = "Car: volvo Wheels: 4 doors: 5";

让我说我想要将值volvo,4,5插入

string car
string wheels
string doors

string newStr = str.Substring(read.IndexOf(':'), read.IndexOf(" "));

然后,在我提取了第一个String之后,我将删除该部分

string str = strRemove(0, read.IndexOf(" ") + 1);

然后重复此操作直到提取完所有内容。这很乏味,并且认为会有更好的方式。

4 个答案:

答案 0 :(得分:1)

怎么样......

string rawData = "Car: volvo Wheels: 4 doors: 5";
        var words = Regex.Split(rawData, @"\w+:").Select(x => x.Trim()).Where(x => x.Length > 0).ToList();
        var car = words[0];
        var wheels = words[1];
        var doors = words[2];

答案 1 :(得分:1)

试试Regex

using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string input = "Car: volvo Wheels: 4 doors: 5";

            string pattern = @"Car:\s+(?'Car'[^\s]+)\s+Wheels:\s+(?'Wheels'[^\s]+)\s+doors:\s+(?'Doors'[^\s]+)";

            Match match = Regex.Match(input, pattern);
            string car = match.Groups["Car"].Value;
            string wheels = match.Groups["Wheels"].Value;
            string doors = match.Groups["Doors"].Value;
        }
    }
}
​

答案 2 :(得分:1)

缺乏更好的细节,很难确定这里的正确答案是什么。但是,假设标签“Car:”,“Wheel:”和“doors:”是不变的,并且您想要在每个标签之后提取变量值,类似下面的内容应该可以满足您的需求:

static readonly Regex _regex = new Regex(
    @"Car: (?<car>[^ ]*) Wheels: (?<wheels>[^ ]*) doors: (?<doors>[^ ]*)",
    RegexOptions.Compiled);

void SomeMethod(string text)
{
    Match match = _regex.Match(text);

    if (!match.Success)
    {
        return;
    }

    string car = match.Groups["car"].Value;
    string wheels = match.Groups["wheels"].Value;
    string doors = match.Groups["doors"].Value;
}

您可以将该技术概括为具有常规构造模式的任何类型的字符串。

答案 3 :(得分:0)

最有效的方法是使用正则表达式。其他人提供正则表达式作为解决方案,但它们不包括汽车名称中有空格的情况,如阿尔法罗密欧&#34;。在这些情况下,这种解决方案会更好。

    string input = "Car: volvo Wheels: 4 doors: 5";

    Match match = Regex.Match(input, @"Car: (?<car>.+) Wheels: (?<wheels>\d+) doors: (?<doors>\d+)");

    Console.WriteLine(match.Groups["car"].Value);
    Console.WriteLine(match.Groups["wheels"].Value);
    Console.WriteLine(match.Groups["doors"].Value);