2017-10-10 25 views
-8

角括弧の値をキャッチしました。an'htmlページを文字列に解析します(外部ライブラリを使用できないため、htmlを文字列のように使用する必要があります) 。私は2つのdivのコンテンツをキャッチするが、私は彼らが持っているidを知っていると私は正規表現を使用してコンテンツをキャッチしようとしているが、私はそれを行うことはできません。私がidの持っているすべての3のdivを返すC#2つの文字列の間の正規表現のキャッチ文字列

var div_tags = Regex.Match(json, "<div id=(.*)</div>").Groups[0];

。しかし、私は2つのdivの必要があり、idには "mobile"という単語が含まれています。 だから私は私の同僚によって提案された別の正規表現を試してみましたが、もしそれが.net regex evaluationetorと互換性がないと思えば。 div要素の例ですThath

string titolo = Regex.Replace(json, "<div id=[.*]mobile[.*]>(.*)</div>");

。私が必要とする唯一の価値はメッセージです。 2つのdivのidはmobileBodyとmobileTitleです。

<div id='mobileBody' style='display:none;'>Message</div>

私は正しいテキストをキャッチすることはできません、私の正規表現で何が悪いのでしょうか?

+3

は[HtmlAgilityPack]のようなHTMLパーサを使用します(http://html-agility-pack.net/?z=codeplex)。また、https://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags –

+3

を参照してください。HTMLパーサーを使用する必要があります。 – SLaks

+0

私は外部ライブラリを使うことができないので、HtmlAgilityPackを使うことはできません。 –

答えて

0

あなたはこれを試すことができます:
<[a-z\s]+id=[\'\"]mobile[\w]+[\'\"][\sa-zA-Z\d\'\=\;\:]*>([a-zA-Z\d\s]+)<[\/a-z\s]+>
はとにかくそれは特殊文字や記号が一致しません。
あなたがここでそれをテストし、最適化することができます:https://regex101.com/r/fnYQ1o/10

をEDIT - コード例
これはメッセージを抽出するためのコードの一部とすることができます:

var rgx = @"<[a-z\s]+id=[\']mobile[\w]+[\'][\sa-zA-Z\d\s\'\=\;\:]*>([a-zA-Z\d\s]+)<[\/a-z\s]+>"; 
var txt = "<!DOCTYPE html><html lang='it' xml:lang='it'><!-- <![endif]--><head><meta http-equiv='Content-Type' content='text/html; charset=UTF-8'><title>Banca Mediolanum S.p.A. | Accesso clienti</title><meta name='description' content='Banca Mediolanum S.p.A. | Accesso clienti'><meta name='keywords' content='Banca Mediolanum S.p.A. | Accesso clienti'><meta name='title' content='Banca Mediolanum S.p.A. | Accesso clienti'><meta name='author' content='Banca Mediolanum S.p.A.'><meta name='robots' content='index, follow'><meta name='viewport' content='width=1439,user-scalable=no'><link rel='shortcut icon' href='./images/favicon.ico' type='image/x-icon'><style>#cort {background-image: url(bmedonline_10set.png);background-repeat: no-repeat;background-position-x: center;height: 850px;width: auto;/*background-size: 100%;*/}@media only screen and (max-width: 768px) and (min-width: 641px) section.contactus-area.chat {}body {border: 0 none;margin: 0;padding: 0}</style></head><body class=' '><!-- Google Tag Manager --><script>(function (w, d, s, l, i) {w[l] = w[l] || [];w[l].push({'gtm.start': new Date().getTime(),event: 'gtm.js'});var f = d.getElementsByTagName(s)[0],j = d.createElement(s),dl = l != 'dataLayer' ? '&l=' + l : '';j.async = true;j.src ='//www.googletagmanager.com/gtm.js?id=' + i + dl;f.parentNode.insertBefore(j, f);})(window, document, 'script', 'dataLayer', 'GTM-KGSP');</script><!-- End Google Tag Manager --><div id='cort'></div><div id='mobileTitle' style='display:none;'>Titolo prova</div><div id='mobileBody' style='display:none;'>Corpo messaggio prova</div></body></html>"; 

/* Using matches and aggregation */ 
var matches = Regex.Matches(txt, rgx).Cast<Match>(); 
/* Aggregation without using foreach*/ 
if (matches != null && matches.Count() > 0) 
{ 
    matches = matches.Where(x => !String.IsNullOrEmpty(x.Groups[1].Value)); 
    var exitString = matches.Select(x => x.Groups[1].Value).Aggregate((x, y) => x + "-" + y); 
    Console.WriteLine("Match and aggregation"); 
    Console.WriteLine(exitString); 
    } 

    /* using replace with regex: .*<div id='mobileTitle'[\s\w\W]*>([\s\w]*)<\/div>[\s\r\n]*<div id='mobileBody'[\s\w\W]*>([\s\w]*)<\/div>.* */ 
    Console.WriteLine(); 
    Console.WriteLine(@"Replace with another regex"); 
    Console.WriteLine(Regex.Replace(txt, @".*<div id='mobileTitle'[\s\w\W]*>([\s\w]*)<\/div>[\s\r\n]*<div id='mobileBody'[\s\w\W]*>([\s\w]*)<\/div>.*", "$1-$2")); 

    Console.ReadLine(); 
+0

こんにちは、お返事ありがとうございます。 前に私がメソッドを使用する場合:Regex.Match(string、 "your_regex"); エラー「認識できないエスケープシーケンス」があります。私はあなたの正規表現の前に@を置く場合、エラーもあります。 どうすればエラーを削除できますか? –