2017-03-29 8 views
1

Imはいくつかの組み合わせを試しましたが、可能なすべての記号を挿入することで終わります。空白で画像を選択する正規表現

私は、画像からのsrcの部分を選択したい

<img[^>]*?src=["']([\w:\\\/\s\S]*[.a-zA-Z]{3,})[^>]*?> 

のように見える正規表現を持っています。

サンプルURLが

Sample <img alt="foo" src="c:\my-folder\contains.dot\and space\in myImagePath.png" title="bar" > 

のように見えるが、これは、同様のタイトルを選択し、私はSRCの最後"で停止します。

私もいくつかのより多くのconstelationsを試してみましたが、同じ、あるいは全く結果と....

ありますが、最初の"がmachedたとき"で停止しましたか? VS2017コンソールからコピー

元のデータ

オリジナルHTMLCode:

<style>*{font-family: Arial, Helvetica, sans-serif;}</style><p><img src=\"C:\\Users\\JustMe\\Desktop\\de mo1.png\" width=\"1635\" height=\"989\" /></p>\n<p>&nbsp;</p> 

コード私はもともとを使用:

using System.Text.RegularExpressions; 

... 

public List<string[]> FetchLinksFromSource(string htmlSource) 
    { 
     List<string[]> links = new List<string[]>(); 

     int i = 1; 
     string regexImgSrc = @"<img[^>]*?src\s*=\s*[""']?([^'"" >]+?)[ '""][^>]*?>"; 
     MatchCollection matchesImgSrc = Regex.Matches(htmlSource, regexImgSrc, RegexOptions.IgnoreCase | RegexOptions.Singleline); 
     foreach (Match m in matchesImgSrc) 
     { 
      string[] matches = new string[3]; 
      string href = m.Groups[1].Value; 
      matches[0] = href; 
      matches[1] = new Uri(href).ToString(); 
      matches[2] = "imageID_" + i++.ToString(); 
      links.Add(matches); 
     } 
     return links; 
    } 

イメージまたはパスに空白が含まれていると、このコードがクラッシュします。

+0

FYI: '[\ w:\\\/\ s \ S] *' == '[\ s \ S] *' == *すべて* –

+0

使いやすく[^ \ "] +:文字列入力=" \"foo\" "; \\ s + src = \ "(? 'src' [^ \"] +)\ "\\ s + title(文字列パターン=" alt = = \ "(? 'title' [^ \"] +) "; マッチマッチ= Regex.Match(入力、パターン); Console.WriteLine( "alt = '{0}'、src = '{1}'、title = '{2}'"、 match.Groups ["alt"]。値、 match.Groups [ src "]。値、 match.Groups [" title "]。値); Console.ReadLine(); – jdweng

+0

このページで回答した正規表現のパターンを使用していますか?それらのどれもがスペースでクラッシュすることはありません! @Dwza – MohaMad

答えて

1

変更するには:

<img[^>]*?src=["']([^"']*[.a-zA-Z]{3,})[^>]*?> 
        ^^^^^ 

私は同じ」か「初めにしてsrc=の終わりのために使用\1を好むlive

+0

それはC#で実行することができません:/ – Dwza

+1

@Dwzaあなたの質問にあなたのコードを持って –

+0

@Dwza ' (href)。ToString() 'これはあなたの' href'に空白が含まれていればうまくいきません –

1

それを参照してください:

<img[^>]*?src=("|')(.*?)\1[^>]*?> 

Demo

+1

これは正しく一致しません。デモを参照してください: – Dwza

+0

デモリンクまたはペーストされたパターンで答えに入りますか?デモリンクでは '(。*?)'を使用しましたが、回答の貼り付けパターンでは、(。*)です。今すぐ更新されました。 – MohaMad

+0

それはまだimgタグ全体と一致し、画像リンク – Dwza