regex语法停止搜索

本文关键字:搜索 语法 regex | 更新日期: 2023-09-27 18:21:27

如何让Regex在"Target This"之后停止搜索?

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

这就是我尝试过的

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

regex语法停止搜索

量词*热切,这意味着它将在获得匹配的同时消耗尽可能多的字符。您需要懒惰量词*?

顺便说一句,与您在这里所做的环视表达式不同,您可能会发现通常更容易使用捕获组:

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

现在,match匹配整个内容,但match.Groups[1]只是引号中的值。

纯正则表达式模式

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

或作为字符串

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

或使用逐字逐句字符串

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

诀窍在于.*之后的问号。它的意思是"尽可能少",使它在遇到第一个结束引号后停止。

请注意,逐字逐句字符串(随@引入)不将反斜杠'识别为转义符。通过将双引号加倍来转义双引号。

其他对正则表达式感兴趣的人注意:使用的搜索模式在前缀和后缀之间找到位置:

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

试试这个:

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

更新如果目标中可能有双引号,请将正则表达式更改为:

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

注意:这不是正确的方法,如果是XML,请查看System.XML,否则,HtmlAgility pack/如何使用HTML Agility pack。