[英]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.