c# - 比较字符串值并拆分它们
问题描述
我有一组具有多个值的字符串。如何拆分和比较它们。
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 位数字。
我想到的方法是尝试从“your”之后拆分,然后从“for”拆分,然后将int和string分开。
有没有更好的办法?
编辑:
货币可以有多个单词,由空格“加元”等分隔。
解决方案
正则表达式解决方案将是这样的:
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);