如何使正则表达式停止搜索"定位此"?
HeaderText="Target This" AnotherAttribute="Getting Picked Up"
这就是我试过的
var match = Regex.Match(string1, @"(?<=HeaderText=\").*(?=\")");
答案 0 :(得分:2)
量词*
急切,这意味着它会消耗尽可能多的字符,同时仍然可以获得匹配。您需要懒惰量词,*?
。
顺便说一句,您可能会发现通常更容易使用捕获组,而不是像在此处一样使用环顾表达式:
var match = Regex.Match(string1, "HeaderText=\"(.*?)\"");
^ ^ these make a capturing group
现在 match
匹配整个内容,但match.Groups[1]
只是引号中的值。
答案 1 :(得分:1)
普通正则表达式
(?<=HeaderText=").*?(?=")
或作为字符串
string pattern = "(?<=HeaderText=\").*?(?=\")";
或使用逐字字符串
string pattern = @"(?<=HeaderText="").*?(?="")";
诀窍是.*
之后的问号。它意味着“尽可能少”,使其在遇到的第一个结束引号后停止。
请注意,逐字字符串(与@
一起引入)不会将反斜杠\
识别为转义字符。通过加倍双引号来逃避双引号。
对其他对regex感兴趣的人注意:使用的搜索模式在前缀和后缀之间找到一个位置:
(?<=prefix)find(?=suffix)
答案 2 :(得分:1)
试试这个:
var match = Regex.Match(string1, "HeaderText=\"([^\"]+)");
var val = match.Groups[1].Value; //Target This
<强>更新强> 如果目标中有可能有双引号,请将正则表达式更改为:
HeaderText=\"(.+?)\"\\s+\\w
注意:这不是正确的方法,如果它是XML,请查看System.XML,HtmlAgilityPack / How to use HTML Agility pack。