使用C#需要多个正则表达式匹配

时间:2012-06-25 23:51:40

标签: c# regex

所以我有这个航班数据列表,我需要能够使用正则表达式解析它(这不是整个列表)。

 1   AA2401  F7 A4 Y7 B7 M7 H7 K7 /DFW A LAX 4  0715    0836  E0.M80 9 3:21 
 2  AA2421 F7 A1 Y7 B7 M7 H7 K7 DFWLAX 4  1106    1215  E0.777 7     3:09
 3UA:US6352  B9 M9 H9 K0 /DFW 1 LAX    1200  1448  E0.733       1:48

例如,我可能需要从第一行,AA,2401等开始,依此类推。现在,我并没有要求有人为我提出一个正则表达式,因为在大多数情况下,我到达了我自己可以处理的地方。我的问题更多地与能够将数据存储在某个位置并访问它有关。

所以我只想尝试最初只是"匹配"我需要的第一条数据,即行号' 1'。我"模式"只获取第一个数字是:"。?(\ d {1,2})。*" 。它{1,2}的原因是因为很明显,一旦你超过10,它就需要能够获得2个数字。线的其余部分设置为绝对是空格或字母。

以下是代码:

var assembly = Assembly.GetExecutingAssembly();
var textStreamReader = new StreamReader(
    assembly.GetManifestResourceStream("FlightParser.flightdata.txt"));
List<string> lines = new List<string>();
do
{
    lines.Add(textStreamReader.ReadLine());
} while (!textStreamReader.EndOfStream);


Regex sPattern = new Regex(@".?(\d{1,2}).*");//whatever the pattern is

foreach (string line in lines)
{
    System.Console.Write("{0,24}", line);

    MatchCollection mc = sPattern.Matches(line);
    if ( sPattern.IsMatch(line))
    {
        System.Console.WriteLine("  (match for '{0}' found)", sPattern);
    }
    else
    {
        System.Console.WriteLine();
    }
    System.Console.WriteLine(mc[0].Groups[0].Captures);

    System.Console.WriteLine(line);
}//end foreach
System.Console.ReadLine();

通过我写的代码,我基本上只是试图获得&#39; 1&#39;进入比赛集合并以某种方式访问​​它并将其写入控制台(为了测试,这不是最终目标)。

3 个答案:

答案 0 :(得分:0)

你的正则表达式包含一个星号,它匹配任意数量的字符 - 即。整条线。删除“*”,它只匹配“1”。您可能会发现在线RegEx测试人员,例如this有用。

答案 1 :(得分:0)

假设您的文件实际上没有按照您发布的格式进行格式化,并且每个字段都用某个字符分隔,您可以将该行的前两位数字与此正则表达式匹配(忽略0和前导零):

^\s*([1-9]\d?)

由于它已分组,您可以通过Groups对象的Match属性访问匹配的部分。

var line = "12 foobar blah 123 etc";
var re = new Regex(@"^\s*([1-9]\d?)");
var match = re.Match(line);
if (match.Success)
{
    Console.WriteLine(match.Groups[1].Value); // "12"
}
else
{
    Console.WriteLine("No match");
}

答案 2 :(得分:0)

以下表达式匹配您要捕获的第一个数字,在组&#34; First&#34;。

^\s*(?<First>\d{1})

在处理正则表达式时,我发现这个regular expression tool非常有用。试试看。 在进行匹配时也将RegexOption设置为Multiline。