2011-01-24 65 views
3

所以我有一个这样的字符串:如何删除字符串中特定字符之间的空格?

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

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

“这是一个字符串与连字符在它”。

目前我使用:

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

但这会导致如下输出:

“这是--- - 一个字符串------与-hyphens-- ------ in-it“

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

谢谢!

回答

9

因为每个人都会提出一个正则表达式的解决方案,我为您呈现一个非正则表达式的解决方案:

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

如果这是一个使用正则表达式解决问题一样容易解决的问题,那么这样做不会助长一个更简单,更易于理解的解决方案。 +1。 – AndyPerfect 2011-01-24 21:00:27

+1

@AndyPerfect:是的。正则表达式是soooooooooooooooo过度使用(所以重复的字母重点)。 – jason 2011-01-24 21:03:38

0

在一个单一的线,你可以做到这一点

​​
6

尝试使用System.Text.RegularExpressions.Regex

只要致电:

Regex.Replace(sampleString, @"\s+-?\s*", "-"); 
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 ; 
} 
0

如果你希望所有的话和现有hypens那么另一种方法是将字符串分割成一个阵列打破空间。然后重建字符串,忽略任何空格,而注入连字符是合适的。

1

这看起来像是一个正则表达式的工作(或者如果你喜欢的话,就是标记化)。

使用一个正则表达式可以吸取所有的空格和连字符,并用一个连字符代替它。这个表达式匹配任意数目的空格和连字符:

[- ]+ 

或者,也可以由空格向上分割字符串为标记,然后用令牌除非令牌本身是一个连字符连字符之间重组的字符串。伪代码:

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

正则表达式:

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

的正则表达式在这里你的朋友。 您可以创建一个模式,其中所有连续的空格/连字符都是单个匹配。

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