我有这个输入:
Title#14 first 324.36 USD Second-GUY 261 USD Third33 101 USD
我希望将该字符串拆分为db。
所以The title #14
是一个标题,它可能是1个字或多个字但是所有字母都有#
和一些int值(也可能是#2222
)
在该标题之后我想获得first
和324.36
,Second-GUY
和261
等。我该怎么做?
我知道分裂,所以我可以input.Split('#')
但我不知道如何处理这个int。
在第二面我将与USD
我想要的第一个值:The Title #14
第二名:first 324.36
第三名:Second-GUY 261
就像在图像中一样:
答案 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;
}