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

求教一个简单的字符串判断问题,高分给
1. 有一个文本文件读取出部分内容如下,最好利用正则表达式,只输出"Compile Include="后边的哪几个cs文件,就是AppData.cs,ABC\DEF.cs, ABC\EFG.cs,当然可能cs文件名会不同于例子中的
.......
    </Reference>
  </ItemGroup>
  <ItemGroup>
    <Compile Include="AppData.cs">
      <DependentUpon>AppData.resx</DependentUpon>
    </Compile>
    <Compile Include="ABC\DEF.cs" />
    <Compile Include="ABC\EFG.cs" />
.......

2. 一段字符串"D:\list\\Applications\Phone\App\program.cs" 帮我写一段代码,能自动将program.cs和前边的目录D:\list\\Applications\Phone\App分开,最好能用正则匹配。谢谢各位
------解决方案--------------------
1. <Compile Include="(?'a'[^.]+.cs)"[^>]*>
2.

string address = @"D:\list\Applications\Phone\App\program.cs";
Console.WriteLine(Path.GetDirectoryName(address)); // D:\list\Applications\Phone\App
Console.WriteLine(Path.GetFileName(address)); // program.cs
Console.WriteLine(Path.GetFileNameWithoutExtension(address)); //program

------解决方案--------------------
1. var reg=new Regex(@"(?<=Compile Include=(""))[^""]+(?=\1)");

2. Path.GetDirectoryName
------解决方案--------------------
两个问题都不应该用正则表达式。

第一个问题应该用标准的XML解析器解析。
第二个问题应该用Path.GetFileName方法。
------解决方案--------------------
            Regex reg = new Regex(@"<Compile Include=""(?<File>[^""]*)""[^>]*>");
            string str = @"<Compile Include=""AppData.cs"">
      <DependentUpon>AppData.resx</DependentUpon>
    </Compile>
    <Compile Include=""ABC\DEF.cs"" />
    <Compile Include=""ABC\EFG.cs"" />";
            MatchCollection mc = reg.Matches(str);
            foreach (Match m in mc)
                Console.WriteLine(m.Groups["File"].Value);