C# - 正则表达式 - ArgumentException

发布于 2024-08-14 16:15:08 字数 1100 浏览 5 评论 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);
        }

错误是:

System.ArgumentException: "Mond ([1-9]) [([1-9]):([1-9][0-9]{0,2}):([1-9][ 0-9]{0,2})]" wird analysiert - Zu viele )-Zeichen。 位于 System.Text.RegularExpressions.RegexParser.ScanRegex() bei System.Text.RegularExpressions.RegexParser.Parse(String re, RegexOptions op) bei System.Text.RegularExpressions.Regex..ctor(字符串模式,RegexOptions选项,布尔useCache) 位于 C:\Users\Heavyfan\Documents\Visual Studio 2008\Projects\WindowsFormsApplication7\WindowsFormsApplication7\Form2.cs:Zeile 27 中的 WindowsFormsApplication7.Form2.comboBox1_SelectedIndexChanged(Object sender, EventArgs e)。 Eine Ausnahme (erste Chance) des Typs“System.ArgumentException”位于 System.dll aufgetreten 中。

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

抱歉我的英语不好。 感谢您的解决方案。

i want to match coordinates from a Browsergame.
My Regex is:

        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);
        }

And the error is:

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(String pattern, RegexOptions options, 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 "System.ArgumentException" ist in System.dll aufgetreten.

What is the problem on my regex?

Sorry for my bad english.
Thx for resolutions.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

剩余の解释 2024-08-21 16:15:08

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

//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");

I didn't understand the error message, but it seems like an escaping problem - you haven't escaped your backslashes. Change the regex to one of the following:

//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");
枯叶蝶 2024-08-21 16:15:08

\x5B 和 \x5D 分别转换为 [ 和 ],使其成为无效的正则表达式。

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

The \x5B and \x5D are converted to [ and ] respectively, making this an invalid RegEx.

Try escaping these directly: \[ and \].

最终幸福 2024-08-21 16:15:08

您需要将 \ 字符加倍。

   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})\\]");

You need to double the \ character.

   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);
    }

and this would be equivalent to

        Regex r = new Regex("Mond ([1-9]) \\[([1-9]):([1-9][0-9]{0,2}):([1-9][0-9]{0,2})\\]");
待天淡蓝洁白时 2024-08-21 16:15:08

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

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

\x5Bis [ and \x5D is ]. As you should know those characters already have a meaning in RegEx, so you should escape them by putting a \ in front of it. I'd use a verbatim string so you don't have to use \ to get a :

new Regex(@"Mond ([1-9]) \[([1-9]):([1-9][0-9]{0,2}):([1-9][0-9]{0,2})\]")
变身佩奇 2024-08-21 16:15:08

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

例子:

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

When you see this error, use Regex.Escape(string) that will solve the error.

example:

int total = Regex.Matches(data, Regex.Escape(newTag)).Count;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文