C#Regex异常 - 十六进制数字不足

时间:2014-06-12 14:19:31

标签: c# regex exception

我正在尝试编写一些正则表达式模式代码,它将通过使用组来取出文本的某​​些部分。这是代码:

    private static string ParseSnippet(string ownitDirectory, string project) 
    {
        Match m = Regex.Match("(" + project + "\\\\.*\\\\)", ownitDirectory, RegexOptions.IgnoreCase);
        return m.Groups[1].Value;
    }

我遇到的问题是我使用的模式会导致异常发生。这个例外对我没有任何意义。我已在大量在线测试人员中测试了该模式,但这并没有帮助解决问题。

有人会对我该做什么有任何建议吗?

编辑:

忘了提到异常是"十六进制数字不足"

2 个答案:

答案 0 :(得分:4)

tldr:您很可能得到错误,因为您的输入中包含“\ x”或“\ u”,例如目录“c:\ xenophobe”或“c:\ user ...”

根据此页面(http://www.regular-expressions.info/quickstart.html),“\ x”用于表示Unicode或其他语言设置字符。对于Unicode,“\ x {FFFF}”或“\ uFFFF”都匹配具有给定十六进制索引的Unicode字符。由于x / u之后的文件夹名称与0-9不匹配,因此十六进制数字的a-f模式和您的文件夹被用作正则表达式匹配,您收到错误。任何时候你使用你的字符串作为正则表达式进行意外比较,你必然会得到正则表达式解析问题。

答案 1 :(得分:1)

根据this page,似乎Regex.Match的参数被反转。你试过这个吗?

Regex.Match(ownitDirectory, "(" + project + "\\\\.*\\\\)", RegexOptions.IgnoreCase);