2017-10-10 2 views
-2

下のサンプル文字列からファイル名(Excelスプレッドシート.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"の前にテキストを取得する必要があります。 ".xls"の直前にある文字のインデックス(一重引用符)を取得するにはどうすればよいですか?

+0

この文字列の ".xls"の直前にあるIndexOf(一重引用符)は、どのようにして見つけることができますか? – giparekh

+0

私は適切な "htmlパーサ"のgoogle検索を行い、そのツールを使って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'が含まれている場合は、上記のアプローチを破ることができます文字。

関連する問題