所以我有这个航班数据列表,我需要能够使用正则表达式解析它(这不是整个列表)。
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;进入比赛集合并以某种方式访问它并将其写入控制台(为了测试,这不是最终目标)。
答案 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。