簡體   English   中英

C# - 正則表達式 - ArgumentException

[英]C# - Regexp - ArgumentException

我想匹配瀏覽器游戲中的坐標。 我的正則表達式是:

        try
        {
            Regex r = new Regex("Mond ([1-9]) \x5B([1-9]):([1-9][0-9]{0,2}):([1-9][0-9]{0,2})\x5D");
            Match m = r.Match("Mond 1 [1:1:1]");
        }
        catch (ArgumentException ex)
        {
            Console.WriteLine(ex);
        }

錯誤是:

System.ArgumentException: "Mond ([1-9]) [([1-9]):([1-9][0-9]{0,2}):([1-9][0-9 ]{0,2})]" wird analysiert - Zu viele )-Zeichen。 bei System.Text.RegularExpressions.RegexParser.ScanRegex() bei System.Text.RegularExpressions.RegexParser.Parse(String re, RegexOptions op) bei System.Text.RegularExpressions.Regex..ctor(字符串模式, RegexOptions 選項, Boolean useCache) bei WindowsFormsApplication7.Form2.comboBox1_SelectedIndexChanged(Object sender, EventArgs e) in C:\Users\Heavyfan\Documents\Visual Studio 2008\Projects\WindowsFormsApplication7\WindowsFormsApplication7\Form2.cs:Zeile 27. Eine Ausnahme (erste Chance) des Typs"系統.ArgumentException”存在於 System.dll 中。

我的正則表達式有什么問題?

對不起,我的英語不好。 感謝決議。

我不明白錯誤消息,但它似乎是一個 escaping 問題 - 你沒有轉義你的反斜杠。 將正則表達式更改為以下之一:

//verbatim 
Regex r = new Regex(@"Mond ([1-9]) \x5B([1-9]):([1-9][0-9]{0,2}):([1-9][0-9]{0,2})\x5D");

//or escaped
Regex r = new Regex("Mond ([1-9]) \\x5B([1-9]):([1-9][0-9]{0,2}):([1-9][0-9]{0,2})\\x5D");

\x5B 和 \x5D 分別轉換為 [ 和 ],使其成為無效的 RegEx。

直接嘗試 escaping 這些: \[ and \]

您需要將\字符加倍。

   try
    {
        Regex r = new Regex("Mond ([1-9]) \\x5B([1-9]):([1-9][0-9]{0,2}):([1-9][0-9]{0,2})\\x5D");
        Match m = r.Match("Mond 1 [1:1:1]");
    }
    catch (ArgumentException ex)
    {
        Console.WriteLine(ex);
    }

這相當於

        Regex r = new Regex("Mond ([1-9]) \\[([1-9]):([1-9][0-9]{0,2}):([1-9][0-9]{0,2})\\]");

\x5B[\x5D] 正如您應該知道的那樣,這些字符在 RegEx 中已經具有含義,因此您應該通過在其前面放置一個 \ 來轉義它們。 我會使用逐字字符串,這樣您就不必使用 \ 來獲取:

new Regex(@"Mond ([1-9]) \[([1-9]):([1-9][0-9]{0,2}):([1-9][0-9]{0,2})\]")

當您看到此錯誤時,請使用Regex.Escape(string)來解決錯誤。

例子:

int total = Regex.Matches(data, Regex.Escape(newTag)).Count;

暫無
暫無

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

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