日期:2014-05-16  浏览次数:20837 次

求教问题,最好用正则解决
有一组数据格式如下
---- METTLER TOLEDO ----
----- SQC-XP V2.02 -----
-------- SAMPLE -----55-
--- 26.02.14 - 10:13 ---
------ B-490-381A ------
Name         xxxxxxxxxxx
Operator            Home
Batch                  1
 
Nominal         0.2000 g
1    0.2017 | |  ? | | 
2    0.1698踻 |  |  | | 
3    0.1984 | |  ? | | 
4    0.1966 | | 眧  | | 
5    0.1993 | |  ? | | 
6    0.1623踻 |  |  | | 
7    0.1990 | |  ? | | 
8    0.2020 | |  ? | | 
9    0.1990 | |  ? | | 
10   0.1991 | |  ? | | 
11   0.2012 | |  ? | | 
12   0.1618踻 |  |  | | 
13   0.2075 | |  | 眧 | 
14   0.2120 | |  |  |瞸 
15   0.2048 | |  |?| | 
16   0.1624踻 |  |  | | 
17   0.2050 | |  |?| | 
18   0.2024 | |  ? | | 
19   0.1631踻 |  |  | | 
20   0.2036 | |  |?| |
 

^     96.28 %  0.19255 g
s      9.04 %  0.01740 g
Min   80.90 %   0.1618 g
Max  106.00 %   0.2120 g
R     25.10 %   0.0502 g

需要结果
中间部分的需要部分取出来1,2,3,4,5。。。。20;
中间部分小数取出来0.1698、0.1984、。。。。0.2036;
请用VS2005实现
------解决方案--------------------
如果数据格式(形式都是固定的)是可以这么干的

先把中间的数据匹配出来(第一次正则根据开始和结果的特性提取)

然后根据内容形式提取列表
开始
Nominal[\s\S]*?g

结束
\^[\s\S]*?g
------解决方案--------------------


foreach(Match m in Regex.Matches(yourstr,@"(?m)^(\d+)\s*(\d+\.\d+).*"))
{
   //m.Groups[1].Value       //中间部分的序号部分取出来1,2,3,4,5。。。。20;
   //m.Groups[2].Value       //中间部分小数取出来0.1698、0.1984、。。。。0.2036
}