如何删除字符串中特定字符之间的空格?

时间:2011-01-24 20:34:52

标签: c# string

所以我有一个这样的字符串:

string sampleString = "this - is a string   - with hyphens  -     in it";

这里要注意的是连字符的左侧和右侧有一个随机数量的空格。目标是用连字符替换我的字符串中的空格(因此字符串中的超量问题)。所以我之后的结果应该是这样的:

"这-是-A-串与 - 连字符功能于它"

目前我正在使用:

sampleString.Trim().ToLower().Replace(" ", "-")

但这导致以下输出:

"这是----A-串------用连字符--------在-它"

寻找最简洁,最简洁的解决方案。

谢谢!

8 个答案:

答案 0 :(得分:9)

因为每个人都会提出一个正则表达式解决方案,所以我向您展示了一个非正则表达式解决方案:

string s = "this - is a string   - with hyphens  -     in it";
string[] groups = s.Split(
                       new[] { '-', ' ' },
                       StringSplitOptions.RemoveEmptyEntries
                  );
string t = String.Join("-", groups);        

答案 1 :(得分:6)

尝试使用System.Text.RegularExpressions.Regex

请致电:

Regex.Replace(sampleString, @"\s+-?\s*", "-");

答案 2 :(得分:1)

这看起来像是正则表达式的作业(如果你愿意,可以是标记化)。

使用正则表达式,您可以将所有空格和连字符填满,并用一个连字符替换它。此表达式匹配任意数量的空格和连字符:

[- ]+

或者,您可以通过空格将字符串拆分为标记,然后使用标记之间的连字符重新组合字符串,除非标记本身是连字符。伪代码:

tokens = split(string," ")
for each token in tokens,
  if token = "-", skip it
  otherwise print "-" and the token

答案 3 :(得分:0)

您可以在一行中执行此操作

Regex.Replace(sampleString, @"\s+", " ").Replace (" ", "-");

答案 4 :(得分:0)

试试这个:

private static readonly Regex rxInternaWhitespace = new Regex( @"\s+" ) ;
private static readonly Regex rxLeadingTrailingWhitespace = new Regex(@"(^\s+|\s+$)") ;
public static string Hyphenate( this string s )
{
  s = rxInternalWhitespace.Replace( s , "-" ) ;
  s = rxLeadingTrailingWhitespace.Replace( s , "" ) ;
  return s ;
}

答案 5 :(得分:0)

如果你想要所有单词和现有的超量,那么另一种方法是将字符串拆分为空格中的数组。然后重建字符串,忽略任何空格,同时注入连字符是合适的。

答案 6 :(得分:0)

正则表达式:

var sampleString = "this - is a string   - with hyphens  -     in it";
var trim = Regex.Replace(sampleString, @"\s*-\s*", "-" );

答案 7 :(得分:0)

Regexes是你的朋友。 您可以创建一个模式,其中所有连续的空格/连字符都是一个匹配。

  var hyphenizerRegex = new Regex(@"(?:\-|\s)+");
  var result = hyphenizerRegex.Replace("a - b c -d-e", "-");