C##如何在两个字符串之间相乘元素

C##如何在两个字符串之间相乘元素,c#,regex,string,linq,C#,Regex,String,Linq,-我有两个字符串(非空格): -我尝试了正则表达式Match和Linq,但我的结果与希望不同: -如何让他们喜欢这样的结果: 注意:plan3和yoyo2不会同时出现在input1和input2中,因此它们不会输入写入的结果。尝试使用Linq和正则表达式,类似这样: string input1 = "bike2car5ship86plan3"; string input2 = "car382bike50ship92yoyo2"; var inputs1 = Regex .Matches(i

-我有两个字符串(非空格):

-我尝试了正则表达式
Match
和Linq,但我的结果与希望不同:

-如何让他们喜欢这样的结果:

注意:
plan3
yoyo2
不会同时出现在
input1
input2
中,因此它们不会输入写入的结果。

尝试使用Linq和正则表达式,类似这样:

string input1 = "bike2car5ship86plan3";
string input2 = "car382bike50ship92yoyo2";

var inputs1 = Regex
  .Matches(input1, "([a-zA-Z]+)([0-9]+)")
  .OfType<Match>()
  .ToDictionary(match => match.Groups[1].Value,
                match => int.Parse(match.Groups[2].Value));

var inputs2 = Regex
  .Matches(input2, "([a-zA-Z]+)([0-9]+)")
  .OfType<Match>()
  .ToDictionary(match => match.Groups[1].Value,
                match => int.Parse(match.Groups[2].Value));

TextInfo textInfo = CultureInfo.CurrentCulture.TextInfo;

var data = inputs1
  .Where(pair => inputs2.ContainsKey(pair.Key))
  .OrderBy(pair => pair.Key)
  .Select(pair => new {
    Name = textInfo.ToTitleCase(pair.Key),
    Quantity = pair.Value,
    Price = inputs2[pair.Key],
    Total = pair.Value * inputs2[pair.Key], })
  .ToArray();

string table = string.Join(Environment.NewLine, data
  .Select(item => string.Format("{0,-5} {1,3} x {2,3} = {3,4}",
     item.Name, item.Quantity, item.Price, item.Total)));

string result = string.Join(Environment.NewLine, 
  table, 
  new string('-', 25), 
  string.Format("Total = {0}", data.Sum(pair => pair.Total)));

Console.Write(result);

这是一个简单的正则表达式,但必须分多个步骤进行:

  • 将出现的每个单词+数字分开
  • 数字单词分开
  • 比较并乘以结果
  • 到步骤1:

    作为正则表达式,您可以使用
    “[a-zA-Z]*\d*”

    [a-zA-Z]*
    允许任意数量的字符后跟一个数字(
    \d*

    步骤2:

    也可以使用正则表达式(
    “\d*”
    )将数字与名称分开

    步骤3:

    您可以将第一个字符串中的匹配项添加到字典中,如下所示:

    MyDictionaryForString.Add(名称、值)

    然后将值与第二个字符串中的值相乘(与第一个字符串获得值的过程相同),如下所示:


    你尝试过什么?你的问题在哪里?为什么
    车5 x 38=190
    ,而不是
    车5 x 382=1910
    ?“我尝试过匹配和LinQ”请发布这些尝试,我们可以从那里开始,2x50 110怎么样?@Carra,一种特殊的数学。。可能是计算机给出“错误”结果的原因:)哇,谢谢你!我现在就去试试。你总是很好地回答我的问题!请原谅我。我得到了这个错误:
    $“{item.Name,-5}{item.Price,3}x{item.Quantity,3}={item.Total,4}”)
    $“总计={data.Sum(pair=>pair.Total)}”--意外字符“$”--无效的表达式术语“)”我添加了libary LINQ、REGEX和Globalization。@Hung-Nguyen:啊!你没有C#6.0,让我把它改成
    string.Format()
    $“Total={data.Sum(pair=>pair.Total)}”
    ->
    string.Format(“Total={0}”,data.Sum(pair=>pair.Total))
    我搜索了gg。我明白了。再次感谢你!我正在使用C#3.0:)@Hung Nguyen:下次,请指定限制:C#3.0和alikefirst time我可以为您的步骤1和步骤2编码。我将尝试第3步。我是一个初学者,所以他们可以花2周时间:D谢谢老兄!!!
    Bike      2    x  50   =  100 
    Car       5    x  382  = 1910 
    Ship      86   x  92   = 7912
    -----------------------------
    Total                  = 9922
    
    string input1 = "bike2car5ship86plan3";
    string input2 = "car382bike50ship92yoyo2";
    
    var inputs1 = Regex
      .Matches(input1, "([a-zA-Z]+)([0-9]+)")
      .OfType<Match>()
      .ToDictionary(match => match.Groups[1].Value,
                    match => int.Parse(match.Groups[2].Value));
    
    var inputs2 = Regex
      .Matches(input2, "([a-zA-Z]+)([0-9]+)")
      .OfType<Match>()
      .ToDictionary(match => match.Groups[1].Value,
                    match => int.Parse(match.Groups[2].Value));
    
    TextInfo textInfo = CultureInfo.CurrentCulture.TextInfo;
    
    var data = inputs1
      .Where(pair => inputs2.ContainsKey(pair.Key))
      .OrderBy(pair => pair.Key)
      .Select(pair => new {
        Name = textInfo.ToTitleCase(pair.Key),
        Quantity = pair.Value,
        Price = inputs2[pair.Key],
        Total = pair.Value * inputs2[pair.Key], })
      .ToArray();
    
    string table = string.Join(Environment.NewLine, data
      .Select(item => string.Format("{0,-5} {1,3} x {2,3} = {3,4}",
         item.Name, item.Quantity, item.Price, item.Total)));
    
    string result = string.Join(Environment.NewLine, 
      table, 
      new string('-', 25), 
      string.Format("Total = {0}", data.Sum(pair => pair.Total)));
    
    Console.Write(result);
    
      Bike    2 x  50 =  100      
      Car     5 x 382 = 1910       
      Ship   86 x  92 = 7912    
      -------------------------
      Total = 9922
    
    if (myDictionaryForString1.ContainsKey(name)) {
        myResultDictionary.Add(name, myDictionaryForString1[name] * value);
    }