提问人:Superguppie 提问时间:5/9/2023 最后编辑:InSyncSuperguppie 更新时间:5/9/2023 访问量:33
.NET 正则表达式与它应该 [复制] 的内容不匹配
.NET Regex not matching something it should [duplicate]
问:
我有以下代码:
public string LoadTemplate()
{
return "<!-- *style -->\r\n<style>\r\n .page {\r\n display: grid;\r\n grid-template-columns: repeat(3, 1fr);\r\n grid-template-rows: repeat(7, 13.468%);\r\n align-content: end;\r\n width: var(--w);\r\n aspect-ratio: 210 / 297; /* A4 portrait */\r\n }\r\n</style>\r\n<!-- /style -->\r\n<div class=\"page\" style=\"[style]\">\r\n[items]\r\n</div>";
}
private static Regex _styleRegex = new Regex(@"<!-- \*style -->(.+)<!-- \/style -->", RegexOptions.Multiline);
public string Style
{
get
{
var match = _styleRegex.Match(LoadTemplate());
if (match.Success)
{
return match.Groups[1].Value;
}
return null;
}
}
(LoadTemplate 的原始版本功能更多。简而言之,我只是让它在这里返回一个示例模板。 当获得 Style 时,我得到 null。
我希望得到样式部分,但没有围绕它的 html 注释。
我使用了几个在线正则表达式测试器,看看我是否能找到问题所在。所有这些都表示应该有匹配项,并且组 1 应该包含源字符串的样式部分。
我追踪了 Style-get。并匹配。成功总是假的。
如何找出问题所在?
答:
1赞
sln
5/9/2023
#1
您只需要启用 Dot-all 模式,这样点就会与换行符匹配。
并跨越线条。(?s)
@"(?s)<!--\s*\*\s*style\s*-->(.+?)<!--\s*/style\s*-->"
https://regex101.com/r/JuYFsB/1
(?s)
<!-- \s* \* \s* style \s* -->
( .+? ) # (1)
<!-- \s* /style \s* -->
添加可选的空白区域使其更加灵活。
上一个:如何从文本中提取发票日期
评论