2017-10-10 32 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>" 
             ----- 
相關問題