使用RegEx在括号内提取数字组

时间:2016-03-06 20:42:05

标签: c# regex

假设我有以下文本块:

/HDMAreaCoverageValue CIP3BeginPrivate
/HDMZones <</HDMInkC [0.000000][0.000002][0.000400][0.006000]
/HDMInkM [0.006000][0.086000]
/HDMInkB [0.000000][0.000002][0.000400]
>> def

我正在尝试仅提取括号内的数字 - 但是,使用我当前的模式,我得到的只是花括号作为结果。我正在尝试:

Regex ColorValueRegex = new Regex("HDMZones([0-9,]{1,})+>>");

这种模式有什么问题?我能看到的是我正在做的是从我稍后提供的数据中提取数字\逗号(或点)。

我的代码:

   foreach (var data in ValidFiles)
    {
        Regex ColorValueRegex = new Regex("HDMZones([0-9,]{1,})+>>");
        var RegexAux2 = ColorValueRegex.Match(data);
        //HDMZonesNumbers.Add(RegexAux2.Groups[1].ToString().Replace("HDMZones <</", "").Replace("<</", "").Replace("/", ""));
        string pattern = @"([\d]+[,.]{0,1})+";
        string NumbersCleaned = Regex.Match(RegexAux2.ToString(), pattern).Value;
    }

注释部分是因为在提取之后我会将结果字符串添加到列表中。 我期望提取一个字符串,如:

[0.000000][0.000002][0.000400][0.006000][0.006000][0.086000]

我已经尝试使用StackOverflow提供的许多示例,但没有一个人能够做到我需要的。在编写这段代码之前,我让它工作但是在一个大型的foreach循环中 - 现在我正在单独处理数据。 任何帮助将不胜感激。感谢

3 个答案:

答案 0 :(得分:1)

如果您只想匹配我建议您使用以下正则表达式的数字。

正则表达式: \[[\d.]*\]

说明:

  • 它将与digitsdotsquare brackets []匹配,并将其作为匹配项返回。

Regex101 Demo

答案 1 :(得分:1)

在C#中尝试:

Regex ColorValueRegex = new Regex(@"\[[0-9\.]+\]");

这给出了你想要的答案。

答案 2 :(得分:1)

我是如何实现我的结果的:我决定将我要求的模式拆分为两个Regex。一个用于提取带有一些文本的数字,另一个用于将数字放在方括号内(括号进入)。然后,稍后我会用[分隔符]替换[带空格和]这样我就可以分成一个数组并做一些我需要的操作。 代码如下:

public void ColorValueExtraction()//Processing all colors values
{
    StringBuilder sb = new StringBuilder(); //Creating a StringBuilder object to append later
    string ColorsWithBrackets = string.Empty;
    foreach (var data in ValidFiles) //data means a file - lots of text
    {

        Regex ValuesRegex = new Regex("HDMZones(.*)>>"); //Extracting only content between HDMZones and >>
        var RegexAux2 = ValuesRegex.Match(data); //Match my pattern on data
        ColorsWithBrackets = RegexAux2.Groups[1].ToString();
        ColorsWithBrackets = ColorsWithBrackets.Replace("HDMZones <</", "").Replace("<</", "").Replace("/", ""); //Replacing a few things

        var pattern = @"\[(.*?)\]"; //Extract numbers and brackets only
        var query = ColorsWithBrackets;

        var matches = Regex.Matches(query, pattern);
        foreach (Match m in matches) //Looping on matches ,numbers found
        {                   
            string aux2 = string.Empty; //auxiliar string 
            aux2 = m.Groups[1].ToString();//auxiliar string receives the match to string
            aux2 = Regex.Replace(aux2, @"\s+", "|");  //replacing all spaces with | , to be used as delimiter in other method               
            sb.Append(aux2); //each iteration appends to StringBuilder aux2 - so, in the end, sb will have all numbers from the respective file                                     
        }               
        HDMZonesNumbersLst.Add(sb.ToString()); //Adding each collection of numbers to a position in the list
    }           
}