1

次の正規表現があります:

^(<span style=.*?font-weight:bold.*?>.*?</span>)

次のコードに一致します。

<span style="font-family:Arial; font-size:10pt"> r.</span></p><p style="margin:0pt"><span style="font-family:Arial; font-size:10pt; font-weight:bold">&#xa0;</span>

しかし、この部分だけを一致させたい (font-weight:bold スタイルを含む最後のスパン)

<span style="font-family:Arial; font-size:10pt; font-weight:bold">&#xa0;</span>
4

3 に答える 3

7

HTML Agility Packを使用して HTMLを解析します。

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(htmlContent);

var boldSpans = from s in doc.DocumentNode.SelectNodes("//span")
                let style = s.Attributes["style"].Value
                where style.Contains("font-weight:bold")
                select s;

または、すべてのノードを 1 行で選択する xpath の方が優れています。

doc.DocumentNode.SelectNodes("//span[contains(@style, 'font-weight:bold')]")
于 2013-07-30T13:59:14.577 に答える
1

^行が一致させたいスパンで始まらないため、使用しないでください。

<span style=["'][^'"]*font-weight:bold[^'"]*['"]>[^<]*</span>

またはエスケープされた文字列として:

"<span style=[\"'][^'\"]*font-weight:bold[^'\"]*['\"]>[^<]*</span>"

これは、<span style=単一引用符または二重引用符が後に続く文字列に一致します。次に、終了引用符を除くすべての文字を許可します。'"[^'"]*

string に一致font-weight:boldし、その後に終了 qoutes を除く任意の数の文字が続き、実際の終了 qouts と終了 tag: に至ります[^'"]*['"]>

(属性の前後にさらに属性を許可する場合と許可しない場合があることに注意してくださいstyle。その場合、正規表現を変更する必要があります)

span開始タグ以外の任意の文字を任意の量含めることができ、その場合<、文字列は終了</span>タグで終了する必要があります。

于 2013-07-30T14:03:25.747 に答える
0

行の先頭を意味するため、^ を削除します。したがって、常に最初のスパンを取得します。.* は (任意の文字) を意味するため、さらにそうです。

これを行うと、最初の一致は現在の出力のままかもしれませんが、2番目の一致はあなたが求めているものになるはずです。

さらに、regexbuddy などのツールは、正規表現のテストに適しています。

于 2013-07-30T13:54:56.367 に答える