2011-03-31 75 views

回答

7

您可以使用此:

yourString.Split("-").Select(s => Regex.Replace(s, "^5$", "2")).Aggregate((a,b) => a + "-" + b); 

相反对于大多数其他答案,这也处理了这种情况,即当要替换的字符串位于输入字符串的开始或结尾时。

+0

结束我喜欢这个,因为它适用于任何集合,因为我的解决方案只适用于示例集合。 – cadrell0 2011-03-31 14:01:46

3

您将需要更换-5-与-2-

+0

+1虽然你的方法只适用于示例集,而不适用于具有不同分隔符的集合,但我更喜欢你的解决方案,而不是使用正则表达式,因为你的方法更容易阅读,而且不太重。我认为,通过一些小调整,您的方法将适合OP的需求,并且不需要昂贵的正则表达式。 – Bazzz 2011-03-31 14:04:05

+0

@Bazzz:我不认为这可以通过符合所有要求的方式进行调整。一个不能正常工作的简单解决方案首先不是解决方案。 – 2011-03-31 14:06:19

2

试试这个

yourString = yourString.Replace("-5-","-2-"); 
+1

它不会在这样的情况下工作:5-2-3-5 – 2011-03-31 13:59:39

+0

@Pawel那个集合中没有5个,所以没有东西可以替代。如果你想要一组领先的5,那么@Stecya和我的解决方案都不会起作用。为此,请使用@Daniel的解决方案。 – cadrell0 2011-03-31 14:02:59

+0

@pawel ......亚,但在我的程序中,这种情况不存在 – 2011-03-31 14:06:02

0

你有一个分隔符。

E.g.如果你真的有字符串链接1-2-5 ...你可以用-2代替'-5'。

+1

if有'-52-'你会以'-22-' – Stecya 2011-03-31 14:00:47

2

,你可以使用正则表达式替换和替换正则表达式像

[^\d]*5[^\d]*匹配5没有任何号码旁边

4
new Regex(@"\b5\b").Replace("1-2-5-7-8-9-10-15", "2"); 

\b匹配单词边界。这意味着'-5'将会匹配,但'-15'不会。

它也将处理匹配在字符串的边缘并且在两侧都没有连字符的情况,例如, '5'和'-5'。