正则表达式语法停止搜索

时间:2012-01-26 17:15:19

标签: c# regex

如何使正则表达式停止搜索"定位此"?

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

这就是我试过的

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

3 个答案:

答案 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.XMLHtmlAgilityPack / How to use HTML Agility pack