【问题标题】: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();当存在执行任务效率更高的字符串方法时,您不应该使用正则表达式。

标签: c# .net regex replace whitespace


【解决方案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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-29
  • 2014-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-20
  • 1970-01-01
相关资源
最近更新 更多