我有一组具有多个值的字符串。如何拆分和比较它们。
I want to buy your 5 Apple for 2 Dollars.
I want to buy your 23 Oranges for 32 Quarters.
我想要抓住的部分是:
I want to buy your x(int) Obj(string) for y(int) Currency(string)
我想挑出对象和货币,然后将它们与允许的项目列表进行比较。
int可以是1-3位数。
我想做的方法是试图从"你的"之后分裂,然后从" for&#34 ;,然后拆分int和string。
有更好的方法吗?
编辑:
货币可以有多个单词用空格隔开"加元和#34;等
答案 0 :(得分:3)
正则表达式解决方案是这样的:
var regex = @"I want to buy your (\d{1,3}) (.+?) for (\d{1,3}) (.+?)\.";
var match = Regex.Match("I want to buy your 5 Apples for 3 Dollars.", regex);
var number1 = match.Groups[1];
var string1 = match.Groups[2];
var number2 = match.Groups[3];
var currency = match.Groups[4];
说明:
\d{1,3}
匹配1到3位数字。
.+?
将继续匹配所有内容,直到匹配后的内容为止。()
将子字符串捕获到组中。括号捕获的内容可以通过Groups[1]
,Groups[2]
等访问这是一个非正则表达式解决方案:
var str = "I want to buy your 5 Apples for 3 Dollars.";
var words = str.Split(' ');
var number1 = words[5];
var string1 = words[6];
var number2 = words[8];
var currency = new string[words.Length - 8];
Array.Copy(words, 9, currency, 0, currency.Length);
var currencyString = string.Join(" ", currency);