正则表达式中的文本匹配一定数量

我有一个看起来像这样的文件:

STUFF STUFF **X** **Y** STUFF STUFF J6 INT-00113G 227.905 5.994 180 SOIC8 J3 INT-00113G 227.905 -203.244 180 SOIC8 U13 EXCLUDES -42.210 181.294 180 QFP128 U3 IC-00276G 5.135 198.644 90 BGA48 U12 IC-00270G -123.610 -201.594 0 SOP8 J1 INT-00112G 269.665 179.894 180 SOIC16 J2 INT-00112G 269.665 198.144 180 SOIC16

我需要抢第3列第4列分开,并将其存储到在C#中的列表。



我目前匹配的第3和第4列一起使用:

var xyResult = new List<string>(); var mainResult = new List<string>(); foreach (var mainLine in fileList) mainResult.Add(string.Join(" ", mainLine)); foreach (var xyLine in mainResult) { Match xyRegex = Regex.Match(xyLine, @"[\d]+\.[\d]+\s+[\d]+\.[\d]+"); if (xyRegex.Success) { xyResult.Add(string.Join(" ", xyRegex)); } } List<string> finalXYResult = xyResult.ToList(); foreach (var line in finalXYResult) displayXYRichTextBox.AppendText(line + "\n");



现在我储存的正则表达式X和Y匹配一个列表。 我想存储两个列中的值单独的所以一个列表X和一个列表Y的。



题:

  • 我可以使用什么正则表达式来匹配号码的第3列,并存储在“X”,(或单独使用另一个正则表达式)匹配数字的第4列,并存储在“Y”?

编辑:

private void calculateXAndYPlacementTwo() { // Reads the lines in the file to format. var fileReader = File.OpenText(filePath + "\\Calculating X,Y File.txt"); // Creates a list for the lines to be stored in. var fileList = new List<string>(); // Adds each line in the file to the list. while (true) { var line = fileReader.ReadLine(); if (line == null) break; fileList.Add(line); } // Creates new lists to hold certain matches for each list. var xyResult = new List<string>(); var mainResult = new List<string>(); var xResult = new List<string>(); var yResult = new List<string>(); foreach (var mainLine in fileList) mainResult.Add(string.Join(" ", mainLine)); mainResult.ForEach(xyLine => { Match xyRegex = Regex.Match(xyLine, @"(?<x>-?\d+\.\d+)\s+(?<y>-?\d+\.\d+)"); if (xyRegex.Success) { String xValue = xyRegex.Groups["x"].Value; String yValue = xyRegex.Groups["y"].Value; xyResult.Add(String.Join(" ", new[]{ xValue, yValue })); foreach (var line in xValue) richTextBox1.AppendText(line + "\n"); foreach (var line in yValue) richTextBox2.AppendText(line + "\n"); } }); }

--------------解决方案-------------

为方便起见,我命名为群体,但下面应该工作:

(?<x>-?\d+\.\d+)\s+(?<y>-?\d+\.\d+)

请注意,这既需要第3&4列具有十进制数(我不做任何检查,接受完整的或十进制数,但如果需要,这可以被添加)。

注意上面已经过测试工作。

概要

基本上我们用你有捕获,但使用捕获组(括号)扩展。 我也使用命名组(的?<x>?<y>的组的开始),所以你可以使用引用找到的值xyRegex.Groups["x"]xyRegex.Groups["y"] ,分别。

我还发现您的捕获失败时数出现了负值,所以我加了一个可选的负号( -?的模式来解释这一点。

因此,分解,这里是语句:

(?<x> # Begin capture group "x"
-? # allow a negative symbol 0 or 1 time
\d+ # allow 1+ numbers
\. # allow a single decimal
\d+ # allow decimal numbers 1+ times
) # end capture group "x"
\s+ # allow white space between the number sets
(?<y> # Begin capture group "y"
-? # \
\d+ # | - same as above
\. # |
\d+ # /
) # End capture group "y"

你只需要使用正则表达式组,然后得到本场比赛的结果的各个元素。

foreach (var xyLine in mainResult) {
//PLACEMENT TWO Regex
Match xyRegex = Regex.Match(xyLine, @"([\d]+\.[\d]+)\s+([\d]+\.[\d]+)");

if (xyRegex.Success) {
xResult.Add(xyRegex.Groups[1].Value);
yResult.Add(xyRegex.Groups[2].Value);
}
}

分类:C# 时间:2012-08-22 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.135 (s). 9 q(s)