比较字符串值并拆分它们

时间:2018-06-19 10:42:43

标签: c# string

我有一组具有多个值的字符串。如何拆分和比较它们。

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;等

1 个答案:

答案 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);