首页 > 解决方案 > 比较字符串值并拆分它们

问题描述

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

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分开。

有没有更好的办法?

编辑:
货币可以有多个单词,由空格“加元”等分隔。

标签: c#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);

推荐阅读