我有一个像这样的字符串
Item 1: MacBook Pro Price 1000€ Item 2: MacBook Air Price 900€ Item 3: iPad 300€ Infinity Loop 1
我想要一个具有3个匹配项的正则表达式,每个匹配项有两组。
答案 0 :(得分:2)
此正则表达式可以完成您的工作。但是,由于没有给出一般的匹配要求,因此您想要分组匹配的内容显得有些奇怪。这是正则表达式,
Item 1:\s+(.*?)\s*Price.*?:\s+(.*?)\s*Price.*:\s+([^\d]+)\s+\d+
如果OP给定的字符串是这个,
Item 1: MacBook Pro Price 1000€ Item 2: MacBook Air Price 900€ Item 3: iPad Price 300€ Infinity Loop 1
那么正则表达式将更加一致并像这样写
Item 1:\s+(.*?)\s*Price.*?:\s+(.*?)\s*Price.*:\s+([^\d]+)\s*Price
答案 1 :(得分:0)
var s = @"Item 1: MacBook Pro Price 1000€ Item 2: MacBook Air Price 900€ Item 3: Cool iPad 300€ Infinity Loop 1";
var pattern = @"Item\s\d+:\s((?'name'.+?)\s(?'price'\d+€))";
var matches = Regex.Matches(s, pattern);
foreach(Match match in matches)
{
Console.WriteLine($"Match: {match.Value}");
Console.WriteLine("\tGroups:");
Console.WriteLine($"\t\t{match.Groups["name"].Value}");
Console.WriteLine($"\t\t{match.Groups["price"].Value}");
}
答案 2 :(得分:0)
Item 1: MacBook Pro Price 1000,00€ Item 2: MacBook Air Price 900,00€ Item 3: iPad Price 300,00€ Infinity Loop 1
我找到了解决方案。我有多个匹配项,每个匹配项都有我需要的两个捕获组。
(?<=Item\s\d: )(\w.*?) Price (\d*?,\d+?€)