regex语法停止搜索
本文关键字:搜索 语法 regex | 更新日期: 2023-09-27 18:21:27
如何让Regex在"Target This"之后停止搜索?
HeaderText="Target This" AnotherAttribute="Getting Picked Up"
这就是我尝试过的
var match = Regex.Match(string1, @"(?<=HeaderText='").*(?='")");
量词*
是热切,这意味着它将在获得匹配的同时消耗尽可能多的字符。您需要懒惰量词*?
。
顺便说一句,与您在这里所做的环视表达式不同,您可能会发现通常更容易使用捕获组:
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。