[英]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.