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,
        //
        // 摘要:
        //     指定單行模式。更改點 (.) 的含義,使它與每一個字符匹配(而不是與除 \n 之外的每個字符匹配)。
        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");
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容