用模式解析字符串中的值

时间:2018-06-28 12:13:02

标签: c# parsing

是否存在具有允许从字符串执行此类解析的功能的方法或库: 输入:我要在其中搜索的输入字符串,用于搜索的模式(稍后将介绍)。 输出:字符串数组

该模式必须采用以下格式:

dfs = dfs.bfill(axis=1).ffill(axis=1)

因此,您应该指定输出值必须位于的位置。

使用此模式的输入和输出示例:

输入:"Items: {0} in Boxes: {1}"

输出:"Items Item 1, Item 2 in Boxes Box 1, Box 2"

我知道这不是一个很难编写的函数,但是我正在寻找标准.NET库中的现有解决方案,或者寻找自定义快速解决方案。

1 个答案:

答案 0 :(得分:1)

我可以想到两种解决方案:使用Regex或使用String操作函数。

使用正则表达式的第一种方法:

string text = "Items Item 1, Item 2 in Boxes Box 1, Box 2";

var match = Regex.Match(text, "^Items(?: ([^,]*),?)* in Boxes(?: ([^,]*),?)*$");

System.Console.WriteLine("Items:");
foreach (Capture cap in match.Groups[1].Captures)
    System.Console.WriteLine(cap.Value); // -->Item1 and Item2

System.Console.WriteLine("Boxes:");
foreach (Capture cap in match.Groups[2].Captures)
    System.Console.WriteLine(cap.Value); // --> Box 1 and Box 2

经典字符串操作的解决方案:

string text = "Items Item 1, Item 2 in Boxes Box 1, Box 2";

var allItems = text.Remove(text.IndexOf("in Boxes")).Remove(0, "Items ".Length);
var itemArray = allItems.Split(',');

var allBoyes = text.Remove(0, text.IndexOf("in Boxes")).Remove(0, "in Boxes ".Length);
var boxArray= allItems.Split(',');

照顾好这里剩下的空间,您仍然需要.Trim()个物品。

您使用什么以及最适合您的问题取决于情况。我更喜欢字符串解决方案,因为它更易读且更不易出错。