2016-07-15 9 views
0

私は正規表現に新しいです:(私の要件の検索、多くの後、私は答えを得るに管理することができましたが、私は、以下に説明するように、余分な結果を得るか:正規表現C#のhtmlタグに

私の文字列

<td valign="top" width="100%"> 
<td width="100%" valign="top"> 
<td valign="top" height="100%" width="100%"> 
<td valign="top"> 

マイ式

/<td (?=.*valign="top")(?=.*width="100%").*>/gm 

マイ結果

<td valign="top" width="100%"> 
<td width="100%" valign="top"> 
<td valign="top" height="100%" width="100%"> 

期待される結果

<td valign="top" width="100%"> 
<td width="100%" valign="top"> 

結論:私は唯一の特定の値を持つのvalignとwidth属性を持つTDタグを抽出したいです。

注:私は多くのデータファイルを解析しなければならないため、HTMLAgilityは全体的な処理を遅らせます。

私は最終的な表現に親切に案内します。乾杯

+0

[属性値を抽出するための正規表現]の複製があります(http://stackoverflow.com/questions/5526094/regex-to-extract-attribute-value) – horHAY

+2

HTMLAgilityが全体的に遅くなる*あなたが*たくさんのデータファイルを解析しなければならない場合*処理*。さて、それはあなたの選択です、私はHtmlAgilityPackに行くでしょう。 –

答えて

0

これは私のためにそれをやっているように見える:

\<td\s+((valign="top"\s+width="100%")|(width="100%"\s+valign="top"))\s*>\gm 

あなたの式は二つの属性がどこかに控え<td初めのあるかどうかを確認するために検索します。これは空白を許してから、valign="top" width="100%"またはwidth="100%" valign="top"のいずれかを検索し、その後にtdタグの終わりの前にさらに空白を入れます。これはwidth属性とvalign属性以外のすべての属性を許可しません。

正規表現を使用すると、予期せぬ状況が発生します。ここでは正規表現をリアルタイムでテストすることができます:http://regexr.com/文字列と正規表現の式を入力して、選択した内容を確認してください。

EDIT:あなたは、単一引用符と属性の周りに二重引用符の両方を考慮してほしい場合は

、してみてください。この1:今すぐ

\<td\s+((valign=([",'])top\3\s+width=([",'])100%\4)|(width=([",'])100%\6\s+valign=([",'])top\7))\s*>\gm 

私はどちらか」や「でを可能にしています属性の値の先頭と属性の値の最後に見つかったものの一致を検索する

上記のリンク先のWebサイトにアクセスして、これらのリンクを使用することをおすすめします。私は正規表現を使うことはほとんどありませんが、私が通常そのウェブサイトで私のために働く表現を見つけることができます。

+0

ありがとうマット...あなたは私の要件を満たしています...乾杯 – Divyesh