2017-02-27 25 views
1

XDocument.Load( "Somelink")を使用してRssフィードを取得しました。私はサーバーからXML出力を取得しています。 descriptionタグでC#を使用して文字列から数値を抽出する

<item> 
    <title>Senior Web Developer</title> 
    <link>Some link</link> 
    <guid isPermaLink="false">Some link</guid> 
    <description><![CDATA[University of UK &lt;br /&gt;Salary: £39,324 to £46,924 pa]]></description> 
</item> 

私は、会社情報や給与を取得しています、私はそのリンクから給与を抽出するために、どのように、その記述にのみ給与部分を必要としています。

var items = (from x in xDoc.Descendants("item") 
         select new 
         { 
          title = x.Element("title").Value, 
          description = x.Element("description").Value 
         }); 

説明タグからその給与を抽出する方法。私はその給与を2つの異なるラベルに表示したい。

グリッドビューで給与が必要です。給与から給与までです。 Regex.Matchメソッドの最初の2桁のみを試しました。

コード: -

<asp:GridView ID="gRss" runat="server" AutoGenerateColumns="false" 
    ShowHeader="false" CssClass="table table-bordered table-striped"> 
    <Columns> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <table class="table table-bordered table-striped"> 
        <tr> 
         <td class="info"><%#Eval("Title") %></td> 
        </tr> 
        <tr> 
         <td><%#Eval("SalaryFrom") %></td> 
        </tr> <tr> 
         <td><%#Eval("SalaryTo") %></td> 
        </tr> 
       </table> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

C#コード

List<Feeds> feeds = new List<Feeds>(); 
     try 
     { 
      XDocument xDoc = new XDocument(); 
      xDoc = XDocument.Load("Some link"); 
      var items = (from x in xDoc.Descendants("item") 
         select new 
         { 
          title = x.Element("title").Value, 
          description = x.Element("description").Value 
         }); 


      if(items != null) 
      { 
       foreach(var i in items) 
       { 

        // string resultString = Regex.Match(i.description, @"\d+").Value; 
        //resultString = Regex.Match(subjectString, @"\d+").Value; 
        var match = Regex.Match(i.description, @": £(?<from>.*?) to £(?<to>.*?) "); 
        var from = match["from"].Value; 
        var to = match["to"].Value; 
        Feeds f = new Feeds 
        { 
         Title = i.title, 
         Description = resultString 
        }; 
        feeds.Add(f); 
       } 
      } 
      gRss.DataSource = feeds; 
      gRss.DataBind(); 

     } 

答えて

1

Regex.Matchesを使用すると、給与範囲を抽出できます。

var matches1 = Regex.Matches(descriptionValue, "£([0-9,]+)"); 
for(int i=0; i < matches1.Count; i++) 
    Console.WriteLine("Parameters >> " + i + "\t" + matches1[i].Value); 

ここでは、結果の最初と2番目の場所がRegex.Matchesから返されます。

2

この正規表現キャプチャグループfromtoという名前: £(?<from>.*?) to £(?<to>.*?)用途。その助けを借りて、値はdescriptionから抽出されます。

var match = Regex.Match(description, @": £(?<from>.*?) to £(?<to>.*?) "); 
var from = match.Groups["from"].Value; 
var to = match.Groups["to"].Value; 

Regex Test

編集:.Groupsプロパティを追加しました。

+0

私は、System.Text.regularExpression.Match型のエフェクトに[]で索引付けを適用できません。質問にC#コードを追加しました。 –

+0

これは、 'Match'オブジェクトの' Groups'プロパティにアクセスする必要があるからです。同様に: 'match.Groups [" from "]。Value;' – mireigi

+0

修正しました。ありがとうございました。 –

関連する問題