仅在管道前后删除空格[重复]

Posted

技术标签:

【中文标题】仅在管道前后删除空格[重复]【英文标题】:Remove spaces only before and after pipe [duplicate] 【发布时间】:2020-10-12 10:18:40 【问题描述】:

我有以下字符串,它与管道“|”分开。

string sample = "SVC1 | SVC2 | SVC3 | SVC1 ";

我需要删除管道前后的空格。我编写了以下正则表达式,它可以正常工作并在逗号 Ex 后删除多余的空格:SVC1 , SVC2 , SVC3 , SVC1

var value = Regex.Replace(sample, " *, *", ",");

如何更改上述正则表达式以使用管道?

【问题讨论】:

要么在创建错误输出之前使用 Trim(),要么拆分并忽略空格: string[] output = input.Split(new char[] ' ', '|' , StringSplitOptions .RemoveEmptyEntries).ToArray();当存在执行任务效率更高的字符串方法时,您不应该使用正则表达式。 【参考方案1】:

| 是一个特殊字符,在正则表达式中表示or,因此需要对其进行转义:\|

string sample = "SVC1 | SVC2 | SVC3 | SVC1 ";
var value = Regex.Replace(sample, @" *\| *", "|");

【讨论】:

我觉得这个正则表达式更优雅一点(\s)?\|(\s)? 测试一下here【参考方案2】:

使用 Linq,

using System;
using System.Linq;
using System.Collections.Generic;

string sample = "SVC1 | SVC2 | SVC3 | SVC1 ";
string result = sample
                  .Split('|')     //Split by pipe 
                  .Aggregate(string.Empty, (x, y) => x + y.Trim()+'|'); //Trim white spaces and concatenate with previous string 

    Console.WriteLine(result);  //Print result

.Net Fiddle

【讨论】:

否决票的任何具体原因? @Flydog57 我的解决方案 only 在管道前后删除空格。如果您是downvoter,请提供您的downvote 反馈【参考方案3】:
string output = string.Join('|', sample.Split(new char[]  ' ', '|' , StringSplitOptions.RemoveEmptyEntries));

【讨论】:

这将分割所有空间,而不仅仅是管道两侧的空间。 OP 应该至少包含一个包含嵌入空间的子字符串示例,因为他/她的问题是“在管道前后删除空格 only

以上是关于仅在管道前后删除空格[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Django-仅在存在字段时删除重复项

Python:仅在列表末尾删除重复值

删除重复的单词、逗号和空格

从字符数组java中“删除”重复空格

grep 在打印之前等待更多行[重复]

正则表达式提取、删除重复项并与 Google 表格中的管道连接