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

时间:2015-07-20 13:20:43

标签: c# .net regex

我正在使用Regex来获取HTML中两个字符串之间的字符串。在

Regex101正如预期的那样令人担忧。但是在.NET中它没有包装我想要的字符串。下面是代码:

html = Regex.Replace(html, @"(?<=<strong>CNPJ:)(.*?)(?=hddServidorCaptcha)\s*", string.Empty);

唯一的区别是我在网站上指定了/s。但是.NET中的默认值是/g。有没有办法改变它? 感谢

2 个答案:

答案 0 :(得分:5)

您可以使用相同方法的overload

html = Regex.Replace(html, @"(?<=<strong>CNPJ:)(.*?)(?=hddServidorCaptcha)\s*", string.Empty, RegexOptions.SingleLine);

答案 1 :(得分:3)

请勿将g(全局)修饰符与s(单行)又名 dotall )修饰符混淆。

g(全局)修饰符意味着所有匹配项(不会在第一次匹配时返回)不存在,这就是为什么如果您返回多个匹配项,您将使用Regex.Matches()方法结果

s dotall )修饰符允许点.跨越换行符序列。默认情况下,点.与新行序列不匹配。您只需在此处使用(?s)内联修饰符:

@"(?s)(?<=<strong>CNPJ:)(.*?)(?=hddServidorCaptcha)"

  ^^^^