簡體   English   中英

C#RegEx字符串提取

[英]C# RegEx string extraction

我有一個字符串:

“ImageDimension = 655x0; ThumbnailDimension =為0x0”。

我必須提取“ImageDimension =”和第一次出現“x”之間的第一個數字(“655”字符串); 並且需要在“ImageDimension =”字符串之后的第一個“x”之后提取第二個數字(“0”字符串)。 與第三和第四個數字相似。

這可以用正則表達式完成(“ImageDimension = x ? ; ThumbnailDimension = x ”)以及如何完成? 而不是笨拙的子串和索引? 謝謝!

我的解決方案不太好:

String configuration = "ImageDimension=655x0;ThumbnailDimension=0x0";
String imageDim = configuration.Substring(0, configuration.IndexOf(";"));
int indexOfEq = imageDim.IndexOf("=");
int indexOfX = imageDim.IndexOf("x");

String width1 = imageDim.Substring(indexOfEq+1, indexOfX-indexOfEq-1);
String height1 = imageDim.Substring(imageDim.IndexOf("x") + 1);

String thumbDim = configuration.Substring(configuration.IndexOf(";") + 1);
indexOfEq = thumbDim.IndexOf("=");
indexOfX = thumbDim.IndexOf("x");

String width2 = imageDim.Substring(indexOfEq + 1, indexOfX - indexOfEq-1);
String height2 = imageDim.Substring(imageDim.IndexOf("x") + 1);

這將使每個值成為單獨的int:

string text = "ImageDimension=655x0;ThumbnailDimension=0x0";
Regex pattern = new Regex(@"ImageDimension=(?<imageWidth>\d+)x(?<imageHeight>\d+);ThumbnailDimension=(?<thumbWidth>\d+)x(?<thumbHeight>\d+)");
Match match = pattern.Match(text);
int imageWidth = int.Parse(match.Groups["imageWidth"].Value);
int imageHeight = int.Parse(match.Groups["imageHeight"].Value);
int thumbWidth = int.Parse(match.Groups["thumbWidth"].Value);
int thumbHeight = int.Parse(match.Groups["thumbHeight"].Value);
var groups = Regex.Match(input,@"ImageDimension=(\d+)x(\d+);ThumbnailDimension=(\d+)x(\d+)").Groups;
var x1= groups[1].Value;
var y1= groups[2].Value;
var x2= groups[3].Value;
var y2= groups[4].Value;
var m = Regex.Match(str,@"(\d+).(\d+).*?(\d+).(\d+)");
m.Groups[1].Value; // 655 ....

(\d+) 

獲取第一組一個或多個數字。 並在整場比賽后將其存儲為第一個被捕獲的組

.

匹配任何角色

(\d+)

獲取下一組一個或多個數字。 並在整場比賽后將其存儲為第二個被捕獲的組

.*? 

以非貪婪的方式匹配和任何字符的數量。

(\d+)

獲取下一組一個或多個數字。 並在整場比賽后將其存儲為第三個被捕獲的組

(\d+)

獲取下一組一個或多個數字。 並在整場比賽后將其存儲為第四個被捕獲的組

由於很多人已經給了你想要的東西,我會用別的東西做出貢獻。 正則表達式難以閱讀且容易出錯。 也許比你的實現更簡潔,但比使用正則表達式更直接和友好:

private static Dictionary<string, string> _extractDictionary(string str)
{
    var query = from name_value in str.Split(';')   // Split by ;
                let arr = name_value.Split('=')     // ... then by =
                select new {Name = arr[0], Value = arr[1]};

    return query.ToDictionary(x => x.Name, y => y.Value);
}

public static void Main()
{
    var str = "ImageDimension=655x0;ThumbnailDimension=0x0";
    var dic = _extractDictionary(str);

    foreach (var key_value in dic)
    {
        var key = key_value.Key;
        var value = key_value.Value;
        Console.WriteLine("Value of {0} is {1}.", key, value.Substring(0, value.IndexOf("x")));
    }
}

當然,這很容易。 您正在尋找的正則表達式模式是:

^ImageDimension=(\d+)x0;.+$

匹配中的第一組是您想要的數字。

暫無
暫無

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

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