【问题标题】:Checking text against several options根据几个选项检查文本
【发布时间】:2013-02-20 06:29:51
【问题描述】:

我对我的正则表达式非常生疏,花了大约 2 个小时来尝试做一些应该非常简单的事情。

基本上,我想要一个可以检查一堆文件名的正则表达式(最终目标是排除不相关的文件 - 这是为了使用 Cassette 中的 FileSearch 类来排除不必要的 javascipt 文件)。

我目前的表达方式是:

(^.+\.+min.js$) | (^Microsoft.$) | (^.+\.+min.js$) | (^.+vsdoc.js$)

我要匹配的文本(文件名)是

jquery-ui-i18n.min.js

这在 Espresso 中有效,但是当我对一些 .NET 代码实际运行它时,没有匹配项:

    static void Main(string[] args)
{
  System.Text.RegularExpressions.Regex reg =
    new System.Text.RegularExpressions.Regex(@"(^.+\.+min.js$) | (^Microsoft.$) | (^.+\.+min.js$) | (^.+vsdoc.js$)", System.Text.RegularExpressions.RegexOptions.None);

  if (reg.IsMatch("jquery-ui-i18n.min.js"))
    Console.WriteLine("match");
  else
    Console.WriteLine("no match");

  Console.Read();
}

是否有任何正则表达式传奇可以向我展示光明!?

【问题讨论】:

  • 为什么你在你的正则表达式中重复了两次(^.+\.+min.js$)?为什么在一些) 和一些( 之前有一个空格。
  • @Rohit 你的答案是正确的。也就是说,空格(我知道这将是一个愚蠢的错误)。而且我还应该在字符串文字“Microsoft”之后的句点之后添加一个+。
  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。

标签: c# .net regex cassette


【解决方案1】:

我会用

(\.min\.js|Microsoft.|\.min\.js|vsdoc\.js)$

你的正则表达式有很多错误

(^.+\.+min.js$) | (^Microsoft.$) | (^.+\.+min.js$) | (^.+vsdoc.js$)
 -           -   -                      
 |           |   |->space would make ^ meaningless unless you use IgnorePatternWhiteSpace option 
 |           |->instead of repeating $ in each group you can keep it outside all the groups
 |->^ is not required because you only want to check the end

【讨论】:

    猜你喜欢
    • 2016-12-10
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 2013-09-24
    • 2023-03-13
    • 2015-12-27
    • 2015-10-03
    • 2014-02-14
    相关资源
    最近更新 更多