簡體   English   中英

在 2 個字符串之間查找,但應首先找到最后一個索引 C#

[英]Find between 2 strings but Last Index should be first found C#

大家好,我正在尋找在兩個短語之間的字符串中查找文本的解決方案,但例如不是字符串中的最后一個,而是首先找到的。 在哪里:

mainString = <Message>1</Message><Message>2</Message><Messages>3</Message>
leftBracket = "<Message>"
rightBracket = "</Message>"

因為現在它返回我1<Message><Message>2<Message><Message>3但我想返回值 1

 private string between2strings(string mainString, string leftBracket, string rightBracket)
        {
            int pFrom = mainString.IndexOf(leftBracket) + leftBracket.Length;
            int pTo = mainString.LastIndexOf(rightBracket);

            string result = mainString.Substring(pFrom, pTo - pFrom);

            return result;
        }

我想在刪除我的聯系信息后顯示所有代碼,或者我應該更改讀取數據的方法:

這里是字符串中的完整 xml 我試圖查找數據

<?xml version="1.0" encoding="utf-8"?>
<response>
    <Count>2</Count>
    <Messages>
        <Message>
            <Smstat>0</Smstat>
            <Index>20001</Index>
            <Phone>+4857782</Phone>
            <Content>Test4</Content>
            <Date>2021-12-11 14:24:23</Date>
            <Sca>+4879096</Sca>
            <SaveType>4</SaveType>
            <Priority>0</Priority>
            <SmsType>1</SmsType>
        </Message>
        <Message>
            <Smstat>0</Smstat>
            <Index>20000</Index>
            <Phone>+4857782</Phone>
            <Content>Test3</Content>
            <Date>2021-12-11 14:02:48</Date>
            <Sca>+4879096</Sca>
            <SaveType>4</SaveType>
            <Priority>0</Priority>
            <SmsType>1</SmsType>
        </Message>
    </Messages>
</response>

我建議您使用XmlDocument object 解析 XML 文檔,並使用 XPath 表達式導航其內容。 這是一個例子

using System;
using System.Xml;

namespace Test
{
    class Program
    {
        static void Main()
        {
            XmlDocument xmlDocument = new XmlDocument();
            xmlDocument.Load("Test.xml");
            XmlNodeList xmlNodeList = xmlDocument.SelectNodes("/response/Messages/Message");
            foreach (XmlNode xmlNode in xmlNodeList)
            {
                Console.WriteLine(xmlNode.InnerXml);
            }
        }

    }
}

法比奧

使用Split(String[], StringSplitOptions)

var mainString = "<Messages>1</Message><Messages>2</Message><Messages>3</Message>";
string[] parts = mainString.Split(new [] { "<Messages>", "</Messages>" }, 
                                  StringSplitOptions.RemoveEmptyEntries);

這會產生數組: { "1", "2", "3" }並且可以輕松選擇所需的條目:

string result = parts[0];

But you may consider using XML processing routines from the System.Xml.Linq Namespace or the Html Agility Pack (also available as NuGet package).

使用正則表達式的答案:

var mainString = "<Message>1</Message><Message>2</Message><Message>3</Message>";

string p  = "<[^>]*>([^<]*)<[^>]*>";
Regex r = new Regex(p);
foreach (Match item in r.Matches(mainString))
{
   Console.WriteLine(item.Groups[1]);
}
            }

這將 output:

1
2
3

正則表達式可以讀作:

  • <[^>]*>

--找到一個<

-- 后跟任何不> 0 次或多次的字符[^>]*

-- 后跟一個>

  • ([^<]*)

-- 查找任何字符,而不是< 0 次或更多次

-- ()使引用這個找到的片段成為可能。

  • <[^>]*>

-- 與第一部分相同,查找結束標簽。

PS解釋正則表達式不是我最受歡迎的主題......

另見: REGEX101

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM