2012-01-26 6 views
3

"Target This"の後にRegexで検索を停止するにはどうすればよいですか?regex syntax stop search

HeaderText="Target This" AnotherAttribute="Getting Picked Up" 

これは私が

var match = Regex.Match(string1, @"(?<=HeaderText=\").*(?=\")"); 
+3

なぜ最初にregexでXMLを解析しようとしていますか? – Tomalak

答えて

2

数量詞*が、それはそれのように多くの文字を消費することを意味し熱心、ありますまだマッチを得ることができます。 怠け者数値化器、*?が必要です。

さておき、むしろあなたがここで行ったような外観アラウンド式を使用するよりも、あなたがキャプチャグループを使用するために、一般的には簡単にそれを見つけることがあります。

var match = Regex.Match(string1, "HeaderText=\"(.*?)\""); 
              ^^these make a capturing group 

matchは全部が一致すると、 match.Groups[1]は単なる引用符の値です。

+0

+1。グループキャプチャといいアイデア。 'match.Groups [0]'は最初の明示的なグループがグループ1であるため、全体が一致します。 –

1

平野正規表現パターン

(?<=HeaderText=").*?(?=") 

または文字列

string pattern = "(?<=HeaderText=\").*?(?=\")"; 

または逐語的文字列

を使用するなどを試してきたものです
string pattern = @"(?<=HeaderText="").*?(?="")"; 

.*の後の疑問符です。これは、「可能な限り少ない」という意味で、最初の終了引用符の後に停止します。

逐語的な文字列(@で導入されました)は、バックスラッシュ\をエスケープ文字として認識しません。二重引用符を二重にエスケープする。正規表現に興味を持って他の人のための

注:使用する検索パターンは接頭辞と接尾辞の間postionを見つける:

(?<=prefix)find(?=suffix) 
1

これを試してみてください:

var match = Regex.Match(string1, "HeaderText=\"([^\"]+)"); 
var val = match.Groups[1].Value; //Target This 

UPDATE が可能性がターゲットに二重引用符を持っている場合に正規表現を変更します。

HeaderText=\"(.+?)\"\\s+\\w 

注:それがあれば、これを行うには正しい方法ではありませんXMLの場合はSystem.XML、そうでない場合はHtmlAgilityPack/How to use HTML Agility packです。