假设我有以下文本块:
/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循环中 - 现在我正在单独处理数据。 任何帮助将不胜感激。感谢
答案 0 :(得分:1)
如果您只想匹配我建议您使用以下正则表达式的数字。
正则表达式: \[[\d.]*\]
说明:
digits
,dot
和square brackets []
匹配,并将其作为匹配项返回。答案 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
}
}