使用Regex校正空白计数

时间:2014-03-01 18:34:01

标签: c# regex

我正在尝试做这样的事情:

输入:

"a     |    b"
"a|b"
"a| b"
"a |b"

以上所有输入的输出必须为:

"a | b"

我尝试过很多东西,却无法实现我的意思。

4 个答案:

答案 0 :(得分:1)

我认为你不需要正则表达式。

var parts = myString.Split('|').Select(p => p.Trim());
var result = string.Join(" | ", parts);

由于@ I4V的答案显示您可以拆分回车换行,然后处理每一行。

以这种方式使用我的答案试试这个:

var splitLines = input.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
var result = splitLines.Select(eachLine => string.Join(" | ", eachLine.Split('|').Select(p => p.Trim());

答案 1 :(得分:1)

这个也会这样做:

input = Regex.Replace(input, "\\s*\\|\\s*", " | ");

答案 2 :(得分:0)

  

这在多行文本中多次出现(在删除的答案中评论)

string input = 
  @"a     |    b
    a|b
    a| b
    a |b";

var result = 
String.Join(Environment.NewLine, 
            input.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
            .Select(line => String.Join(" ", Regex.Matches(line, @"\w|\|")
                                                   .Cast<Match>()
                                                   .Select(m => m.Value))));

答案 3 :(得分:0)

你可以试试这个

Regex.Replace(str, "([a-zA-Z]+)(\s*)\|(\s*)([a-zA-Z]+)", "$1 | $4");

我可能误以为1美元,4美元的位置。它可能是&#34; $ 4 | $ 5#34 ;.虽然不是完整的答案,但可能很接近。