• Visual Studio 和 c# 正则表达式


    今天集中说说VS生产环境下的正则。

    Visual Sturdio 2012以上版本查找替换

    对于VS的正则,准确说,是VS2012之后的IDE下VS的正则。

    VS的查找和替换功能支持基础的正则表达式,主要说一下替换。

    在查找框中用(.*)来标识字符,在替换框里用$1$2来识别。

    C# 正则表达式

    然后说下C#的正则

    c#的正则使用起来很方便,正则类为Regex,其构造参数有两个,第一个是我们的pattern,第二个是正则的选项(默认为None),具体内容如下,我比较懒,就直接把官方注释贴过来了:

        [Flags]
        public enum RegexOptions
        {
            //
            // 摘要:
            //     指定不设置选项。
            None = 0,
            //
            // 摘要:
            //     指定不区分大小写的匹配。
            IgnoreCase = 1,
            //
            // 摘要:
            //     多行模式。更改 ^ 和 $ 的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。
            Multiline = 2,
            //
            // 摘要:
            //     指定有效的捕获仅为形式为 (?<name>...) 的显式命名或编号的组。这使未命名的圆括号可以充当非捕获组,并且不会使表达式的语法 (?:...) 显得笨拙。
            ExplicitCapture = 4,
            //
            // 摘要:
            //     指定将正则表达式编译为程序集。这会产生更快的执行速度,但会增加启动时间。在调用 System.Text.RegularExpressions.Regex.CompileToAssembly(System.Text.RegularExpressions.RegexCompilationInfo[],System.Reflection.AssemblyName)
            //     方法时,不应将此值分配给 System.Text.RegularExpressions.RegexCompilationInfo.Options 属性。
            Compiled = 8,
            //
            // 摘要:
            //     指定单行模式。更改点 (.) 的含义,使它与每一个字符匹配(而不是与除 
     之外的每个字符匹配)。
            Singleline = 16,
            //
            // 摘要:
            //     消除模式中的非转义空白并启用由 # 标记的注释。但是,System.Text.RegularExpressions.RegexOptions.IgnorePatternWhitespace
            //     值不会影响或消除字符类中的空白。
            IgnorePatternWhitespace = 32,
            //
            // 摘要:
            //     指定搜索从右向左而不是从左向右进行。
            RightToLeft = 64,
            //
            // 摘要:
            //     为表达式启用符合 ECMAScript 的行为。该值只能与 System.Text.RegularExpressions.RegexOptions.IgnoreCase、System.Text.RegularExpressions.RegexOptions.Multiline
            //     和 System.Text.RegularExpressions.RegexOptions.Compiled 值一起使用。该值与其他任何值一起使用均将导致异常。
            ECMAScript = 256,
            //
            // 摘要:
            //     指定忽略语言中的区域性差异。有关更多信息,请参见 Performing Culture-Insensitive Operations in the RegularExpressions
            //     Namespace。
            CultureInvariant = 512
        }
    

    得益于C#可以用@开头的字符串(无转译字符串),写起正则时没有Java那么蛋疼,其他如IsMatch()方法,Match()方法和Java十分类似。

    此外,C#匹配中,可以通过(?<groupName>.*)的形式获取该部分匹配到的值,其中.*也可以是其他任何正则匹配字符。

    这里简单给个例子。

    声明:

    //对信息进行检测的正则表达式
    public static Regex sendRegex;
    public static Regex receiveRegex;
    public static Regex errorRegex;
    

    初始化:

    sendRegex = new Regex(@">>d+>(?<number>d+#)");
    receiveRegex = new Regex(@"(?<number>d+#)");
    errorRegex = new Regex(@"(error|错误|失败)");
    

    使用:

    if (sendRegex.IsMatch(message))
    {
        Messenger.Default.Send(sendRegex.Match(message).Groups["number"].Value, "MessageSend");
    }
    
    else if (receiveRegex.IsMatch(message))
    {
        Messenger.Default.Send(receiveRegex.Match(message).Groups["number"].Value, "MessageReceived");
    }
    else if (errorRegex.IsMatch(message))
    {
        Messenger.Default.Send("failed", "MessageReceived");
    }
    
  • 相关阅读:
    交通综合改造工程EPC总承包项目
    二三维一体化地理信息平台
    NetCore3.1升级到Net5.0序列化方法过时问题
    windows server2012部署.net core IIS,页面报503,应用程序池自动停止。。。
    NetCore使用NPOI导入Word中的图片信息
    NetCore 使用 iTextSharp 读取 PDF 中的文字信息
    NetCore 在 Docker中文件路径找不到的问题
    Vue中数组list直接push的是对象而不是追加数据的问题
    netcore3.1增加阿里云OSS云存储服务
    Centos中Docker容器中程序访问宿主机Redis和Mysql
  • 原文地址:https://www.cnblogs.com/cielosun/p/7339726.html
Copyright © 2020-2023  润新知