【问题标题】:Check if string is Match GetInvalidFileNameChars() [duplicate]检查字符串是否匹配 GetInvalidFileNameChars() [重复]
【发布时间】:2016-01-12 10:12:19
【问题描述】:

我尝试检查字符串是否匹配GetInvalidFileNameChars()

我想使用正则表达式

所以我将GetInvalidFileNameChars() 的字符放入一个字符串中,然后检查

if Regex.IsMatch(id, stringInvalidFileName)

我想如果id = "4711./" 那么Regex.IsMatch(id, stringInvalidFileName)

应该是真的,但它是假的

我的错误是什么,为什么它是错误的?!提前致谢

【问题讨论】:

    标签: c#


    【解决方案1】:

    为什么要使用正则表达式?

    这样可以正常工作:

    string s = "4711./";
    if (Path.GetInvalidFileNameChars().Any( c => s.Contains(c))
    

    正如Rawling 在下面指出的那样,当您处理大字符串时,使用Intersect 可能会更有效:

    string longString = "Something much, much longer than this";
    if (longString.Intersect(Path.GetInvalidFileNameChars()).Any())
    

    对于相对较短的字符串(例如文件路径),可能没有什么好处。在我看来,我更喜欢第一个选项,因为它更清楚地传达了代码的意图。

    【讨论】:

    • 或者你可以使用Intersect 而不是O(n^2) :p
    • Contains 一旦找到匹配项就会立即返回,而Intersect 总是需要枚举整个字符串,所以我怀疑Intersect 会给你带来任何真正的好处。
    • Intersect(...).Any() 在找到匹配项后立即停止,并且只对每个输入进行一次迭代。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多