【问题标题】:Patterns with special characters in Microsoft.VisualBasic.CompilerServices.LikeOperator.LikeString does not workMicrosoft.VisualBasic.CompilerServices.LikeOperator.LikeString 中带有特殊字符的模式不起作用
【发布时间】:2018-07-10 11:01:34
【问题描述】:

我尝试使用 LikeOperator.LikeString 功能进行模式匹配,如下所示:

    // Usage: bool matchValue = LikeOperator.LikeString(string, pattern, CompareMethod);
    bool match = LikeOperator.LikeString("*test*/fe_quet", "(*)test(*)/*", Microsoft.VisualBasic.CompareMethod.Text);

根据文档,上面应该返回 true,但它只是返回 false。我试图用括号转义 (*),但它似乎并没有以这种方式工作。谁能帮我用特殊字符定义模式字符串?

谢谢

【问题讨论】:

  • @WiktorStribiżew 我不明白,这里没有提到这种情况:link 你能帮我输入完整的模式字符串吗?非常感谢
  • @WiktorStribiżew 不幸的是,添加波浪号不会逃脱模式字符串中的星号。它没有工作:(
  • 其实我需要将模式字符串中的星号转义,因为它们在模式字符串中具有不同的含义(“零个或多个字符匹配”)。
  • 如果您需要正则表达式解决方案,我可以提供正则表达式方面的帮助。但是,一旦您使用字符集[...],这些通配符在这种情况下就可以了。
  • @WiktorStribiżew 我过去在使用正则表达式时遇到了一些问题,因此我决定使用这个功能!

标签: c# vb.net vba design-patterns


【解决方案1】:

来自Like Operator(您提供):

要匹配左括号 ([)、问号 (?)、数字符号 (#) 和星号 (*) 的特殊字符,请将它们括在括号中。

因此,您需要将星号包装在 [] 而不是 () 中:

bool match = LikeOperator.LikeString("*test*/fe_quet", "[*]test[*]/[*]", Microsoft.VisualBasic.CompareMethod.Text);

使用 Regex 而不是 VB 命名空间可能会更好。

【讨论】:

  • 啊啊啊啊,就是这样!非常感谢,所以没有正确阅读它是错误的。再次感谢“朋友”:)
  • 我是正则表达式语言的新手,所以我想保持简单,最好使用 LikeOperator。您认为使用它而不是 Regex 有什么重大问题吗?
  • 没有什么错误,但微软建议不要直接使用这个函数,即使在 VB (source) 中也是如此。 VB Like 运算符调用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-15
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多