所以我有一个这样的字符串:
string sampleString = "this - is a string - with hyphens - in it";
这里要注意的是连字符的左侧和右侧有一个随机数量的空格。目标是用连字符替换我的字符串中的空格(因此字符串中的超量问题)。所以我之后的结果应该是这样的:
"这-是-A-串与 - 连字符功能于它"
目前我正在使用:
sampleString.Trim().ToLower().Replace(" ", "-")
但这导致以下输出:
"这是----A-串------用连字符--------在-它"
寻找最简洁,最简洁的解决方案。
谢谢!
答案 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", "-");