【问题标题】:Parsing values from string with pattern使用模式解析字符串中的值
【发布时间】:2018-06-28 12:13:02
【问题描述】:

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

模式必须采用如下格式:

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

所以你应该指定输出值必须在的地方。

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

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

输出:["Item 1, Item 2", "Box 1, Box 2"]

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

【问题讨论】:

  • 不,框架中没有这样的方法可以为你做这件事。您要么必须使用字符串方法或正则表达式。 “我知道这不是一个很难编写的函数” 是的,你需要这样做。

标签: c# parsing


【解决方案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()这些物品。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多