如何从动态字符串C#获取特定字符串

我在提取特定字符串时遇到问题。我有以下字符串(可能有所不同):

show inventory<br><br>Name: "My Device Name One",DESCR: "ASA 5506-X
SSD"<br>PID: ASA5506-SSD,VID: N/A,sn: MSA203301BV<br>WARD-99ST-FW01#Name:
"Chassis",DESCR: "ASA 5506-X with FirePOWER services,8GE,AC,DES"<br>PID: ASA5506,VID: V06,sn: JMX2042Y12V<br>Name: "Storage Device 1",DESCR: "ASA5506-X SSD"<br>
PID: ASA5506-SSD,sn:MSA203301BV<br>WARD-99ST-FW01#

我想从该字符串中解析“ sn”,其中“名称” =机箱。因此,从上面的字符串中,我需要result =“ JMX2042Y12V”。我不想使用</br>标签进行解析,因为在某些情况下它们不会出现。

到目前为止,我已经使用了此方法:(无法正常工作,它基于我不想使用的</br>标签。

private static List<string> ExtractFromBody(string body,string start,string end)
{
    List<string> matched = new List<string>();

    int indexStart = 0;
    int indexEnd = 0;

    bool exit = false;

    while (!exit)
    {
        indexStart = body.IndexOf(start);

        if (indexStart != -1)
        {
            indexEnd = indexStart + body.Substring(indexStart).IndexOf(end);

            matched.Add(body.Substring(indexStart + start.Length,indexEnd - indexStart - start.Length));

            body = body.Substring(indexEnd + end.Length);
        }
        else
        {
            exit = true;
        }
    }

    return matched;
}

我这样打电话:

var result= ExtractFromBody(St,",sn: ","<br/>");

foreach (var r in result)
{
    Console.Write(r);
}

Console.ReadLine();
hohoman610 回答:如何从动态字符串C#获取特定字符串

您可能可以使用正则表达式(与您现有的代码结合,找到要搜索的子字符串的起始索引)

using System;
using System.Text.RegularExpressions;

public class Program
{
    public static void Main()
    {
        var body = "show inventory<br><br>Name: \"My Device Name One\",DESCR: \"ASA 5506-XSSD\"<br>PID: ASA5506-SSD,VID: N/A,SN: MSA203301BV<br>WARD-99ST-FW01#Name:\"Chassis\",DESCR: \"ASA 5506-X with FirePOWER services,8GE,AC,DES\"<br>PID: ASA5506,VID: V06,SN: JMX2042Y12V<br>Name: \"Storage Device 1\",DESCR: \"ASA5506-X SSD\"<br>PID: ASA5506-SSD,SN:MSA203301BV<br>WARD-99ST-FW01#";

        var regex = new Regex("(SN: )(\\w+)");

        var indexStart = body.IndexOf("Chassis");

        var substringToParse = body.Substring(indexStart);

        var matchingResult = regex.Match(substringToParse);

        //SN: JMX2042Y12V
        var fullResult = matchingResult.Groups[0].Value;
        Console.WriteLine($"Full result: {fullResult}");

        //SN: (<- contains trailing space)
        var snGroup = matchingResult.Groups[1].Value;
        Console.WriteLine($"SN group result (with trailing space): {snGroup}");

        //JMX2042Y12V
        var valueGroup = matchingResult.Groups[2].Value;
        Console.WriteLine($"Value group result: {valueGroup}");
    }
}
,

我使用此Name:\s?"Chassis"[\s\S]*?,SN:/s?(.{11})正则表达式查找所有匹配项,然后从每个匹配项中检索第1组

我还假设每个SN ID都将恰好包含11个字符,因为我们需要知道SN何时停止 EDIT:您可以使用(\w+)代替(.{11})

您在这里:

        string someHtml = "show inventory<br><br>Name: \"My Device Name One\",DESCR: \"ASA 5506 - XSSD\"<br>PID: ASA5506-SSD,DES\" < br > PID: ASA5506,SN: JMX2042Y12V<br> Name: \"Chassis\",DESCR: \"ASA5506-X SSD \" < br > PID: ASA5506 - SSD,VID: N / A,SN: MSA203301BV<br> WARD-99ST - FW01#";


        Regex FindHwndWrapper = new Regex("Name:\\s?\"Chassis\"[\\s\\S]*?,SN:\\s?(.{11})");

        MatchCollection matches = FindHwndWrapper.Matches(someHtml);

        foreach(Match match in matches)
        {
            Console.WriteLine(match.Groups[1]);
        }
本文链接:https://www.f2er.com/3126375.html

大家都在问