拆分一些价值后

时间:2017-06-30 15:20:47

标签: c# regex string split

我有这个输入:

  

Title#14 first 324.36 USD Second-GUY 261 USD Third33 101 USD

我希望将该字符串拆分为db。

所以The title #14是一个标题,它可能是1个字或多个字但是所有字母都有#和一些int值(也可能是#2222

在该标题之后我想获得first324.36Second-GUY261等。我该怎么做?

我知道分裂,所以我可以input.Split('#')但我不知道如何处理这个int。

在第二面我将与USD

分开

我想要的第一个值:The Title #14

第二名:first 324.36

第三名:Second-GUY 261

就像在图像中一样:

enter image description here

2 个答案:

答案 0 :(得分:2)

这可以帮助解决方案

string lsInput = "The Title #14 first 324.36 USD Second-GUY 261 USD Third33 101 USD";
var loMatch = Regex.Match(lsInput, @"(?<title>.*#\d+)\s(?<parts>.*)");
string lsTitle = loMatch.Groups["title"].Value; //The Title #14
var loParts = loMatch.Groups["parts"].Value.Split(new string[] { "USD" },  StringSplitOptions.RemoveEmptyEntries).
   Select(item => item.Trim()).ToList();

输出loParts:

Count = 3
[0]: "first 324.36"
[1]: "Second-GUY 261"
[2]: "Third33 101"

答案 1 :(得分:0)

Regex Class非常适合这样的任务,编写模式并让Regex类来完成工作。
这里有一个示例,说明如何使用基于您的Regex字符串。
请在示例中阅读我的评论:

private void button1_Click(object sender, EventArgs e)
{
    string Target = "The Title #14 first 324.36 USD Second-GUY 261 USD Third33 101 USD";
    var value = string.Empty;
    var pattern = "(The Title) ([#]{1})([0-9]{1,500})";

    if (Example(Target,pattern, ref value) == true) 
    {
        MessageBox.Show(value); // output: The Title #14
    }

    pattern = "(first) ([0-9]{1,500}(.)[0-9]{1,500})";

    if (Example(Target, pattern, ref value) == true) 
    {
        MessageBox.Show(value); // output: first 324.36, if you want only the number one way is to replace  MessageBox.Show(value); to MessageBox.Show(value.Replace("first",""));
    }

    pattern = "(Second-GUY) ([0-9]{1,500}(.)[0-9]{1,500})";

    if (Example(Target, pattern, ref value) == true) 
    {
        MessageBox.Show(value); // output: Second-GUY 261, if you want only the number one way is to replace  MessageBox.Show(value); to MessageBox.Show(value.Replace("Second-GUY",""));
    }
}

private bool Example(string Target,string pattern, ref string value)
{

    System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(pattern);
    bool ismatched = reg.IsMatch(Target);

    if (ismatched)
    {
        System.Text.RegularExpressions.Match match = reg.Match(Target);
        value = match.Value;
    }

    return ismatched;
}