Regex删除尾部空白和多个空行
本文关键字:删除 尾部 空白 Regex | 更新日期: 2023-09-27 18:05:18
我希望在用C#编写的Visual Studio 2013扩展中使用regex表达式。
我试图在保留空行的同时删除行中的尾随空格。我还想删除多个空行。应保留现有线路末端(通常为回车线路馈线(。
因此,以下文本(空格显示为下划线(:
hello_world__
___hello_world_
__
__
hello_world
将变成:
hello_world
___hello_world
hello_world
我尝试了许多不同的模式来删除尾部空格,但最终要么与尾部空格不匹配,要么丢失回车。我还没有尝试删除多个空行。
以下是我迄今为止尝试过的几种模式:
's+$
(?<='S)'s+$
感谢您迄今为止的回答。他们都不适合我的需要,但他们帮助我找到了我需要的东西。我认为问题在于VS2013中的regex有一些奇怪之处(请参阅在Visual Studio中使用正则表达式(。这两个操作对我有效:
不替换' +(?=('n|'r?$))
。
将^'r?$('n|'r'n){2,}
替换为'r'n
。
使用删除多个空行和尾部空白
(?:'r'n['s-['rn]]*){3,}
并用CCD_ 4代替。
参见演示
要删除剩余的空白,可以使用
(?m)['s-['r]]+'r?$
参见演示2
' +(?=('n|$))
任意数量的空格,并在换行或行尾(字符串/文本中的最后一个字符(后检查。(当然,需要启用多行和全局模式(
就像双关语一样,在不使用Regex的情况下,您总是可以通过其行尾标记来分割文档,然后使用TrimEnd
(如Anton Semenov所强调的(进行反馈。。。
(假设一个文本文档被读入字符串…(
// Ascertain the linefeed...
string str = "This is a test 'r'nto see if I can force 'ra string to be broken 'non multiple lines 'r'n into an array.";
string[] t = str.Split(new string[] { "'r'n", "'r", "'n" } ,StringSplitOptions.RemoveEmptyEntries);
thediv.InnerHtml = str + "<br /><br />";
foreach(string s in t)
{
thediv.InnerHtml += s.TrimEnd() + "<br />";
}
我还没有确定时间,但如果你想避免Regex的复杂性(如果可以的话,我会这样做——见下文*(,你应该找到足够快的速度来做你想做的事情。
*如果可以的话,我会避开Regex。这并不意味着我不使用它。Regex有它的位置,但我相信它是相关工作的最后手段,例如遵守格式的复杂灵活字符串,在这种情况下,替代方案会生成大量代码。将Regex保持在最低限度有助于提高代码的可读性。
作为单独的操作-
删除任何(?m)[^'S'r'n]+$
的尾部空白
删除带有文本(?m)(?<='S)[^'S'r'n]+$
的尾随空白行
删除重复的空行(连同空白修剪(
# Find: (?>'A(?:[^'S'r'n]*'r'n)+)|(?>'r'n(?:[^'S'r'n]*('r'n)){2,})
# Replace: $1'r'n
(?>
'A
(?: [^'S'r'n]* 'r 'n )+
)
|
(?>
'r 'n
(?:
[^'S'r'n]*
( 'r 'n ) # (1)
){2,}
)
's
包含换行符,我只搜索多个空格。我不知道VS的细节,但这应该有望做到:
[" "]*?$