【发布时间】:2015-11-22 07:10:20
【问题描述】:
我在这里真的很困惑。我在 C# 中编写了一个 sn-p 代码,它传递了一个可能的文件路径。如果它包含在正则表达式字符串中指定的字符,它应该返回 false。但是,正则表达式函数 Match 拒绝找到任何匹配的内容(我什至将其设置为我知道在字符串中的单个字符),这让我非常恼火。 代码是:
static bool letterTest(string pathway)
{
bool validPath = false;
char[] c = Path.GetInvalidPathChars();
string test = new string(c);
string regex = "["+test+"]";
string spTest = "^[~#%&*\\{}+<>/\"|]";
Match match = Regex.Match(pathway, spTest);
if (!match.Success)
{
validPath = true;
}
return validPath;
}
我传递给它的字符串是:@"C:/testing/invalid#symbol"
我对正则表达式做错了什么/误解了,还是我搞砸了正则表达式以外的东西?
【问题讨论】:
-
这不是正则表达式的问题,只需使用
string.Contains() -
@Jonesopolis 测试子字符串,但
pathway.Any(c => Path.GetInvalidPathChars().Contains(c))可以工作。 -
如果您打算使用正则表达式,您应该尝试使用
string regex = "["+Regex.Escape(test)+"]";。由于您获得了无法在文件夹路径中使用的符号数组,并且它们包含特殊的正则表达式元字符,因此这是处理该问题的最安全方法。但是,在这里,您需要使用某些人提供的 LINQ。 -
如果你要使用你自己的无效字符,如图所示,告诉你不需要插入符号(你想要在类中找到那些)。但是,正则表达式没有正确字符串为双引号字符串。应该是
string regex = "[~#%&*\\\\{}+<>/\"|]";