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

本文关键字:正则表达式 字符串 单行 何强制 替换 | 更新日期: 2023-09-27 18:03:39

我用一个正则表达式来获得HTML中两个字符串之间的字符串。在

Regex101按预期工作。但是在。net中,它没有包装我想要的字符串。下面是代码:

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

唯一的区别是它指定了站点上的/s。但是。net的默认值是/g,有办法改变它吗?由于

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

您可以使用同一方法的重载:

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

不要将g(全局)修饰符与s(单行)aka (dotall)修饰符混淆。

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

s (dotall)修饰符,允许点.跨换行序列。默认情况下,点.不匹配换行符序列。您可以在这里简单地使用(?s)内联修饰符:

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