2

我想匹配来自 Browsergame 的坐标。我的正则表达式是:

        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: "蒙德 ([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(String pattern, RegexOptions options, Boolean useCache)在 C:\Users\Heavyfan\Documents\Visual Studio 2008\Projects\WindowsFormsApplication7\WindowsFormsApplication7\Form2.cs:Zeile 中的 WindowsFormsApplication7.Form2.comboBox1_SelectedIndexChanged(Object sender, EventArgs e) 27. Eine Ausnahme (erste Chance) des Typs "System System.dll aufgetreten 中存在 .ArgumentException”。

我的正则表达式有什么问题?

对不起,我的英语不好。谢谢决议。

4

5 回答 5

3

我不明白错误消息,但这似乎是一个逃避问题 - 你没有逃避你的反斜杠。将正则表达式更改为以下之一:

//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");
于 2009-12-10T09:27:11.937 回答
1

\x5B 和 \x5D 分别转换为 [ 和 ],使其成为无效的 RegEx。

尝试直接转义这些:\[ and \].

于 2009-12-10T09:26:39.493 回答
0

您需要将\字符加倍。

   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})\\]");
于 2009-12-10T09:28:41.190 回答
0

\x5B[\x5D]。正如您应该知道的那样,这些字符在 RegEx 中已经具有含义,因此您应该通过在其前面放置一个 \ 来转义它们。我会使用逐字字符串,因此您不必使用 \ 来获取:

new Regex(@"Mond ([1-9]) \[([1-9]):([1-9][0-9]{0,2}):([1-9][0-9]{0,2})\]")
于 2009-12-10T09:31:48.730 回答
0

当您看到此错误时,使用Regex.Escape(string)它将解决错误。

例子:

int total = Regex.Matches(data, Regex.Escape(newTag)).Count;
于 2021-08-26T09:19:27.573 回答