如何强制Regex.Replace匹配'/s'(将字符串视为单行)的正则表达式修饰符

3

我正在使用正则表达式从HTML中获取两个字符串之间的字符串。在 Regex101">Regex101 上它如预期般工作。但在.NET中,它没有包含我想要的字符串。以下是代码:

html = Regex.Replace(html, @"(?<=<strong>CNPJ:)(.*?)(?=hddServidorCaptcha)\s*", string.Empty);
唯一的区别是我在网站上指定了/s,但.NET的默认值是/g。有没有办法改变它? 谢谢

你应该明确指定/g/s的含义,这样对于了解.NET类型的人来说回答会更容易。 - Lasse V. Karlsen
/g 表示全局匹配,/s 表示单行匹配。 - Adam Prescott
2个回答

6
您可以使用同一方法的重载版本:overload
html = Regex.Replace(html, @"(?<=<strong>CNPJ:)(.*?)(?=hddServidorCaptcha)\s*", string.Empty, RegexOptions.SingleLine);

3
不要把 g (global) 修饰符和 s (单行模式) 也称为(点号匹配所有)的修饰符混淆。 g (global) 修饰符意味着匹配所有内容(不只是第一个匹配),但并不存在。因此,如果您想返回多个匹配结果,应使用Regex.Matches() 方法。 s (点号匹配所有)修饰符允许“.”跨越换行符。默认情况下,“.”不匹配换行符。您可以使用内联修饰符(?s)
@"(?s)(?<=<strong>CNPJ:)(.*?)(?=hddServidorCaptcha)"

  ^^^^

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,