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);
这是一个简单的正则表达式,但必须分多个步骤进行:
“[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);
}