gpt4 book ai didi

c# - .Net 正则表达式匹配 $ 与字符串的结尾而不是行,即使启用了多行

转载 作者:太空狗 更新时间:2023-10-30 01:15:04 28 4
gpt4 key购买 nike

我试图突出显示 Markdown 代码,但遇到了 .NET 正则表达式多行选项的这种奇怪行为。

以下表达式:^(#+).+$ 在任何在线正则表达式测试工具上都能正常工作:

enter image description here

但它拒绝与 .net 一起工作:

enter image description here

它似乎没有考虑 $ 标签,只是突出显示字符串末尾的所有内容,无论如何。这是我的 C#

RegExpression = new Regex(@"^(#+).+$", RegexOptions.Multiline)

我错过了什么?

最佳答案

很明显您的文本包含换行符而不是 LF。在 .NET 正则表达式中,点匹配除 LF 之外的任何字符(换行符,\n)。

参见 Multiline Mode MSDN regex reference

By default, $ matches only the end of the input string. If you specify the RegexOptions.Multiline option, it matches either the newline character (\n) or the end of the input string. It does not, however, match the carriage return/line feed character combination. To successfully match them, use the subexpression \r?$ instead of just $.

所以,使用

@"^(#+).+?\r?$"

.+?\r?$ 将延迟匹配除 LF 之外的任何一个或多个字符,直到换行符之前的第一个 CR(可选)。

或者只使用否定的字符类:

@"^(#+)[^\r\n]+"

[^\r\n]+ 将匹配除 CR/LF 之外的一个或多个字符。

关于c# - .Net 正则表达式匹配 $ 与字符串的结尾而不是行,即使启用了多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40058265/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com