簡體   English   中英

C#在某些文本之間獲取字符串部分的最佳解決方案

[英]C# Best solution to get part of string between some text

我有一個像

"[echo]\r\n[echo] Building VARIANT_SETTINGS 05...\r\n[echo] VARIANT_SETTINGS file 1094_002-900208R7.0_05R01 02.hex successfully generated!\r\n"

如何獲得1094_002-900208R7.0_05R01 02.hex

我試圖通過Regex.Replace做到這一點,但我不太了解它是如何發生的。 我試過了

fileName = Regex.Replace(hexOutInfo, @"^.*VARIANT_SETTINGS file ([ ._0-9a-z-]+) successfully generated!.*$", "$1");

這使我回到全文。

使用System.Text.RegularExpressions.Match

Regex.Match方法返回Match類的一個實例,該實例表示字符串中的第一個模式匹配。 后續匹配由Match.NextMatch方法返回的Match對象表示。 另外, Regex.Matches方法返回一個由零個,一個或多個Matc h對象組成的MatchCollection對象。

...

如果模式匹配成功,則Value屬性包含匹配的子字符串, Index屬性指示輸入字符串中匹配子字符串的從零開始的位置,而Length屬性指示輸入字符串中匹配子字符串的長度。

由於單個匹配項可能涉及多個捕獲組,因此Match具有一個Groups屬性,該屬性返回GroupCollection GroupCollection具有返回每個組的訪問器。 Match繼承自Group因此可以直接訪問匹配的整個子字符串。 即,Match實例本身等效於Match.Groups[0] (在Visual Basic中為Match.Groups(0) )。

我建議修改正則表達式以僅匹配部分輸入並避免多行匹配問題。 文件名子表達式需要同時匹配大小寫字母。

Regex mypattern = new Regex("VARIANT_SETTINGS file ([ ._0-9A-Za-z-]+) successfully generated!");
string filename = mypattern.Match(mytext).Groups[1].Value;

filename現在應為"1094_002-900208R7.0_05R01 02.hex"

一個非常簡單的方法是:

        string hexOutInfo = "[echo]\r\n[echo] Building VARIANT_SETTINGS 05...\r\n[echo] VARIANT_SETTINGS file 1094_002-900208R7.0_05R01 02.hex successfully generated!\r\n";

        string leftCrop = hexOutInfo.Replace("[echo]\r\n[echo] Building VARIANT_SETTINGS 05...\r\n[echo] VARIANT_SETTINGS file ", "");
        string hexFileName = leftCrop.Replace(" successfully generated!\r\n", "");

您應該使用Regex.Match。 這是一個快速而骯臟的解決方案

var str = "[echo]\r\n[echo] Building VARIANT_SETTINGS 05...\r\n" +
          "[echo] VARIANT_SETTINGS file 1094_002-900208R7.0_05R01 02.hex " + 
          "successfully generated!\r\n"

var match = Regex.Match(str, @".*\sfile\s(?<name>.*\.hex)\s.*");
Console.WriteLine(match.Groups["name"].Value);

輸出

1094_002-900208R7.0_05R01 02.hex

如果經常使用它,則可能要編譯並緩存正則表達式。 模式也可以有所改善,但我會留給您做。

暫無
暫無

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

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