在特定符号之前和之后插入(单个)空格

时间:2016-10-05 03:30:23

标签: c# regex

我需要在特定符号之前和之后插入(单个)空格(例如" |"),如下所示:

string input = "|ABC|xyz |123||999|   aaa|   |BBB";
string output = "| ABC | xyz | 123 | | 999 | aaa | | BBB";

使用一些正则表达式模式可以很容易地实现这一点:

string input = "|ABC|xyz |123||999|   aaa|   |BBB";

// add space before |
string pattern = "[a-zA-Z0-9\\s*]*\\|";
string replacement = "$0 ";
string output = Regex.Replace(input, pattern, replacement);

// add space after |
pattern = "\\|[a-zA-Z0-9\\s*]*";
replacement = " $0";
output = Regex.Replace(output, pattern, replacement);

// trim redundant spaces
pattern = "\\s+";
replacement = " ";
output = Regex.Replace(output, pattern, replacement).Trim();

Console.WriteLine("Original String: \"{0}\"", input);
Console.WriteLine("Replacement String: \"{0}\"", output);

但这不是我想要的,我的目标只是使用一种模式。

我尝试了很多方法,但它仍然没有按预期工作。请有人帮帮我。

提前非常感谢你!

3 个答案:

答案 0 :(得分:4)

谢谢@Santhosh Nayak。

我只是编写更多的C#代码来获得OP想要的输出。

string input = "|ABC|xyz |123||999|   aaa|   |BBB";
string pattern = @"[\s]*[|][\s]*";
string replacement = " | ";
string output = Regex.Replace(input, pattern, (match) => {
     if(match.Index != 0)
        return replacement;
     else
        return value;
});

我在MSDN中引用Regex.Replace(string input, string pattern, MatchEvaluator evaluator)

答案 1 :(得分:1)

试试这个。

string input = "|ABC|xyz |123||999|   aaa|   |BBB";

string pattern = @"[\s]*[|][\s]*";
string replacement = " | ";
string output = Regex.Replace(input, pattern, replacement);

答案 2 :(得分:0)

根据this answer

尝试此解决方案
var str = "|ABC|xyz |123||999|   aaa|   |BBB";
var fixed = Regex.Replace(str, patt, m =>
            {
                if(string.IsNullOrWhiteSpace(m.Value))//multple spaces
                    return "";
                return " | ";
            });

这会返回| ABC | xyz | 123 | | 999 | aaa | | BBB

我们在|(space)(space)|aaa之间有BBB,但这是由于|替换为|