簡體   English   中英

Regex.Replace 替換空匹配

[英]Regex.Replace replaces empty match

我使用以下正則表達式僅替換非空行(帶空格的行不算為空)。

^(.+)$與多行選項。

根據 regex101 這應該可以工作: https://regex101.com/r/S5Fcqw/1

但似乎 C#s 的正則表達式實現有點不同。 我可以使用替換來完成這項工作還是需要查看匹配項?

這是調用: Regex.Replace(text, @"^(.+)$", " $1", RegexOptions.Multiline);

語言為 C# 7.2 和 net472 作為目標框架。

所以我現在找到了有問題的組合:

        public static string IndentBy(this string text, int count, string indentationMarker = " ")
        {
            if (string.IsNullOrEmpty(text))
            {
                return text;
            }

            var spaces = string.Join(string.Empty, Enumerable.Repeat(indentationMarker, count));
            var replacement = $"{spaces}$1";
            var indented = Regex.Replace(text, @"^(.+)$", replacement, RegexOptions.Multiline);
            return indented;
        }

        [InlineData("a", "    a")]
        [InlineData("a\nb", "    a\n    b")]
        [InlineData("a\r\nb", "    a\r\n    b")]
        [InlineData("a\n\nb", "    a\n\n    b")]
        [InlineData("a\r\n\r\nb", "    a\r\n\r\n    b")] // this line fails
        public void IndentBy_Input_GivesExpectedOutput(string input, string expected)
        {
            // act
            var indentet = IndentBy(input, 4);

            // assert
            indentet.ShouldBe(expected);
        }

所以解決方法是不依賴$來匹配換行符,而是手動進行。

我現在使用: @"([^\r\n]+\r?\n?)"RegexOptions.SingleLine (不確定是否有必要),它適用於我的用例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM