我正在使用正则表达式从HTML中获取两个字符串之间的字符串。在 Regex101">Regex101 上它如预期般工作。但在.NET中,它没有包含我想要的字符串。以下是代码:
html = Regex.Replace(html, @"(?<=<strong>CNPJ:)(.*?)(?=hddServidorCaptcha)\s*", string.Empty);
唯一的区别是我在网站上指定了/s,但.NET的默认值是/g。有没有办法改变它?
谢谢
html = Regex.Replace(html, @"(?<=<strong>CNPJ:)(.*?)(?=hddServidorCaptcha)\s*", string.Empty, RegexOptions.SingleLine);
g (global) 修饰符和 s (单行模式) 也称为(点号匹配所有)的修饰符混淆。
g (global) 修饰符意味着匹配所有内容(不只是第一个匹配),但并不存在。因此,如果您想返回多个匹配结果,应使用Regex.Matches() 方法。
s (点号匹配所有)修饰符允许“.”跨越换行符。默认情况下,“.”不匹配换行符。您可以使用内联修饰符(?s)。
@"(?s)(?<=<strong>CNPJ:)(.*?)(?=hddServidorCaptcha)"
^^^^
/g和/s的含义,这样对于了解.NET类型的人来说回答会更容易。 - Lasse V. Karlsen/g表示全局匹配,/s表示单行匹配。 - Adam Prescott