簡體   English   中英

正則表達式匹配2個括號內的子字符串,例如[我想要這個文本]但是沒有括號?

[英]Regex to match a substring within 2 brackets, e.g. [i want this text] BUT leave out the brackets?

我已經設法找到正則表達式,以獲得我想要的結果,即

Regex r1 = new Regex(@"\[(.*?)\]");
string row = HEADERNAMES[COL1,COL2,COL3,COL4];
Match match = r1.Match(row);
string result = match.ToString();

輸出:“[COL1,COL2,COL3,COL4]”;

我知道我可以使用:

result.Replace("[", "");
result.Replace("]", "");

得到我想要的,但我想知道是否有一種方法可以在不執行String方法的情況下從Regex結果中省略delimeters [和]。

我原本以為使用Regex本身有一個更優雅的解決方案?

提前致謝。

Regex r1 = new Regex(@"\[(.+)\]");
string row = "HEADERNAMES[COL1, COL2, COL3, COL4]";
// Regex puts capture groups (i.e. things captured between ( and ) ) 
// in Groups collection
string match = r1.Match(row).Groups[1].Value;
//match = "COL1, COL2, COL3, COL4"

在“Aku”提出的解決方案中有一個重要的觀點(我還沒有代表發表評論)

您應該注意,Groups集合中的第2項提供了您需要的值。 第一項(Groups(0))相當於整個匹配的字符串(Match.ToString()或Match.Value)

另一種方法,雖然我認為它比aku的例子慢一點是這樣的:

        Regex r1 = new Regex(@"(?<=\[).*(?=\])");
        string row = "HEADERNAMES[COL1, COL2, COL3, COL4]";
        Match match = r1.Match(row);
        Console.WriteLine(match.ToString());

        /* Output:
        COL1, COL2, COL3, COL4
        */

我不知道,但我懷疑你可能會在列名之后,並且即將在你的結果字符串上執行.Split。 您是否知道可以使用單個正則表達式單獨獲取所有列名稱?

        Regex r1 = new Regex(@"\[(?:(?<colName>[^,\]]*)(?:,\s)?)*\]");
        string row = "HEADERNAMES[COL1, COL2, COL3, COL4]";
        Match match = r1.Match(row);

        foreach(Capture c in match.Groups["colName"].Captures)
            Console.WriteLine(c.ToString());

        /* Output:
        COL1
        COL2
        COL3
        COL4
        */

暫無
暫無

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

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