2017-10-10 34 views
-2

如何从下面的示例字符串中提取文件名(excel spreadsheets .xls)?注意:这里的字符串可以是任何东西,只有已知的东西我第n个字符串是扩展名(.xls)&文件名被括在单引号中。如何从C#winform中的字符串提取文件名?

string text = "... 
<table> 
    <tr> 
     <td> 
      <a href="javascript:parent.ShowSheet('abc test 1.xls')">abc</a> 
     </td> 
     <td> 
      <a href="javascript:parent.ShowSheet('xyz test 2.xls')">XYZ</a> 
     </td> 
    </tr> 
</table>..."; 

我在这里只知道扩展名(.xls)。通过使用组合string.Substring()& string.IndexOf我可以得到“.xls”后面的文本,但我需要将“.xls”之前的文本转换为文件名。我怎样才能得到IndexOf字符'(单引号),就在“.xls”之前?

+0

如何才能在此字符串中的“.xls”之前找到IndexOf'(单引号)? – giparekh

+0

我会做一个适当的“html解析器”的谷歌搜索,并使用该工具来从你的html中获取值。 –

+0

给定的文件名现在可以有整个字符串中的空格可以是文件名 – BugFinder

回答

0

普通的'[^']*'表达式将匹配:

  • 全场比赛55-71 'abc test 1.xls'
  • 全场比赛127-143 'xyz test 2.xls'

C#代码来做到这一点:

string text = @"... 
    <table> 
    <tr> 
     <td> 
      <a href=""javascript:parent.ShowSheet('abc test 1.xls')"">abc</a> 
     </td> 
     <td> 
      <a href=""javascript:parent.ShowSheet('xyz test 2.xls')"">XYZ</a> 
     </td> 
    </tr> 
    </table>..."; 

    var matches = Regex.Matches(text, "'[^']*'"); 

    foreach(var match in matches) 
    { 
     Console.WriteLine(match); 
    } 

这是它的一把小提琴 -这里

+0

正如我所提到的,字符串在这里仅仅是主要字符串(完整的HTML页面)的一部分,整个字符串可能包含许多其他文本用单引号括起来。所以在这种情况下,这种解决方案可能无法工 – giparekh

+0

这将工作相同...尝试一些不同的文本... –

+0

如果你想使它更严格只是改变正则表达式匹配'('* .xls')' –

0

字符串可以是任何东西,在字符串中唯一已知的就是 扩展(.xls的)&文件名由'单引号括起来

分割字符串,并采取只vlaues至极结束与.xls

var fileNames = raw.Split('\'') 
        .Where(value => value.EndsWith(".xls")) 
        .ToList(); 

但如果上述字符串包含.xls'没有以前可以打破的方法字符。

"<a href=""Sheet('abc test 1.xls')"">abc.xml'</a><a href=""Sheet('xyz test 2.xls')""></a>" 
             ----- 
相关问题