簡體   English   中英

C#中的正則表達式

[英]Regular expression in C#

我有這樣的文字。

@@ MMIVLoader @ ProductVer @ 4.1.2 @ BCM_7400S_LE @ Product @ Aug 21 2009 @
@@ MMIVLib @ ObjectVer @ 4.1.2 @ BCM_7400S_LE @ Product @ Aug 21 2009 @
@@ HuaweFGDLDrv @ ObjectVer @ 01.00.09 @ 7324 @Products @ Aug 20 2009 @
@@ ProtectVer @ ObjectVer @ 127.8.1 @ BCM_SDE5.03 @PRO產品@ 2009年8月4日06:56:19 @
@@ KernelSw @ ObjectVer @ 0.0.1 @ BCM-7454 @ PRODUCT @ Dec 19 2007 @
@@ ReceiverSw @ ObjectVer @ E.5.6.001 @ HWBC01ZS @ PRODUCT @ 2010年5月3日@

我希望輸出像一個數組

MMIVLoader 4.1.2
MMIVLib         4.1.2
HuaweFGDLDrv 01.00.09
ProtectVer 127.8.1 
KernelSw 0.0.1
ReceiverSw E.5.6.001

任何人都可以建議我如何使用正則表達式在c#中執行此操作,或者是否有任何復雜的方法來執行此操作

提前致謝

這很容易,您可以通過@ (刪除空項目)拆分並拉出第一個和第三個項目。

var list = myString.Split(new String[] {Environment.NewLine},
          StringSplitOptions.RemoveEmptyEntries)                
   .Select(item => item.Split(new char[] {'@'}, 
          StringSplitOptions.RemoveEmptyEntries))
   .Where(a => a.Length > 2)
   .Select(a => new { Item = a[0], Version = a[2] }).ToArray();

或者只是從線上移除額外的東西

Regex.Replace(text, @"^@@([^@]+)@[^@]+@([^@]+).*", "$1,$2",RegexOptions.Multiline);

要得到

MMIVLoader,4.1.2
MMIVLib,4.1.2
HuaweFGDLDrv,01.00.09
ProtectVer,127.8.1
KernelSw,0.0.1
ReceiverSw,E.5.6.001

然后,在每一行上用逗號分隔以獲得數組

如果你想要一個瘋狂的正則表達式解決方案,你可以使用這個:

var matches = Regex.Matches(
    input,
    "@@(?<name>.*?)@(Product|Object)Ver@(?<ver>.*?)@",
    RegexOptions.IgnoreCase
).Cast<Match>().Select(m => m.Groups);

foreach (var match in matches)
{
    Console.WriteLine("{0} {1}", match["name"], match["ver"]);
}

為了完整起見,這是一個帶有查詢語法的LINQ版本:)

string[] lines = new string[] { 
            "@@MMIVLoader@ProductVer@4.1.2@BCM_7400S_LE@Product@Aug 21 2009@",
            "@@MMIVLib@ObjectVer@4.1.2@BCM_7400S_LE@Product@Aug 21 2009@",
            "@@HuaweFGDLDrv@ObjectVer@01.00.09@7324@PRODUCT@Aug 20 2009@",
            "@@ProtectVer@ObjectVer@127.8.1 @BCM_SDE5.03@PRODUCT@Aug  4 2009 06:56:19@",
            "@@KernelSw@ObjectVer@0.0.1@BCM-7454@PRODUCT@ Dec 19 2007@",
            "@@ReceiverSw@ObjectVer@E.5.6.001@HWBC01ZS@PRODUCT@May  3 2010@" };
var q = from components in
           (from line in lines
            select line.Split(new char[] { '@' }, 
                     StringSplitOptions.RemoveEmptyEntries))
        select new { Name = components[0], Version = components[2] };
foreach (var item in q)
{
    Console.WriteLine("Item: Name={0} Version={1}", item.Name, item.Version);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM