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+$

Regex删除尾部空白和多个空行

感谢您迄今为止的回答。他们都不适合我的需要,但他们帮助我找到了我需要的东西。我认为问题在于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的细节,但这应该有望做到:

[" "]*?$