日期:2014-05-17  浏览次数:20444 次

asp.net 提取字符串的正则表达式
有文本为:
<ScanInfo UrlPath='2011\05\5667'><FileName><![CDATA[00表1.jpg]]></FileName><FileName><![CDATA[00目录1.jpg]]></FileName><FileName><![CDATA[00目录2.jpg]]></FileName><FileName><![CDATA[00目录3.jpg]]></FileName><FileName><![CDATA[00封面.jpg]]></FileName><FileName><![CDATA[01.jpg]]></FileName><FileName><![CDATA[02.jpg]]></FileName></ScanInfo>
分别提取出UrlPath字符串,以及各jpg的名字字符串。即取出的值:2011\05\5667;00表1.jpg;00目录1.jpg;
本文想到正则表达式提取,但是因为是菜鸟,求帮助。


------解决方案--------------------
C# code

            StreamReader reader = new StreamReader("c:\\temp\\1.txt",Encoding.Default);
            string source = reader.ReadToEnd();
            Regex reg = new Regex(@"(?is)((?<=UrlPath=')[^'>]+(?='))|((?<=\[CDATA\[)[^\[\]]+(?=\]))");

            MatchCollection mc = reg.Matches(source);
            foreach (Match m in mc)
            {
                MessageBox.Show(m.Value);
            }

------解决方案--------------------
C# code
string pattern = @"(?i)(?<=<ScanInfo[^>]*?UrlPath=['""]([^'""]*?)['""][^>]*?>[\s\S]*?)<FileName[^>]*?>(?:(?!</FileName>).)*\[([^\[\]]*?\.[^\[\]]*?)\][^>]*?>\s*?</FileName>";
                string tempStr = File.ReadAllText(@"C:\Documents and Settings\Administrator\桌面\Test.txt", Encoding.GetEncoding("GB2312"));//读取txt

                foreach (Match m in Regex.Matches(tempStr, pattern))
                {
                    //循环输出

                    string UrlPath = m.Groups[1].Value;//2011\\05\\5667
                    string FileName = m.Groups[2].Value;//00表1.jpg
                }