2013-01-31 40 views
1

考慮以下字符串:如何修剪字符串中某些圖案字符的字符?

string s = "I need drop the 1 from the end of AAAAAAAA1 and BBBBBBBB1" 

我如何從一個1結尾的8字符串修剪「1」?我到目前爲止找到一個工作正則表達式模式,發現這些字符串,我猜我可以使用TrimEnd刪除「1」,但我該如何修改字符串本身?

Regex regex = new Regex("\\w{8}1"); 

foreach (Match match in regex.Matches(s)) 
{ 
    MessageBox.Show(match.Value.TrimEnd('1')); 
} 

我正在尋找將是「我需要從AAAAAAAA和BBBBBBBB年底下降了1」

+1

執行八個字符必須是相同的? –

+0

如果您有正則表達式來查找需要刪除的字符,請使用Regex.Replace:http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.replace.aspx – mbeckish

+0

如果它是任何8個字符的字符串,爲什麼你需要正則表達式,除非你的意思是子串? – DGibbs

回答

4

Regex.Replace結果是這項工作的工具:

var regex = new Regex("\\b(\\w{8})1\\b"); 
regex.replace(s, "$1"); 

我稍微修改正則表達式以匹配你正在努力做的更仔細的描述。

+0

「$ 1」是我不知道該怎麼做的部分。謝謝!!這工作完美。 –

+0

我建議'新的正則表達式(@「\ b(\ w {8})1 \ b」)'而不是 - 我發現它更容易閱讀沒有雙反斜槓。 – Bobson

0

這裏一個非正則表達式的方法:

s = string.Join(" ", s.Split().Select(w => w.Length == 9 && w.EndsWith("1") ? w.Substring(0, 8) : w)); 
-1

試試這個:

s = s.Replace(match.Value, match.Value.TrimEnd('1')); 

和S字符串將有你想要的值。

0

在VB中使用LINQ:

Dim l = 8 
Dim s = "I need drop the 1 from the end of AAAAAAAA1 and BBBBBBBB1" 
Dim d = s.Split(" ").Aggregate(Function(p1, p2) p1 & " " & If(p2.Length = l + 1 And p2.EndsWith("1"), p2.Substring(0, p2.Length - 1), p2)) 
+0

這是C#,而不是VB –

+1

這很好。我是一名VB開發人員,他來看這個問題,可能還有其他人喜歡我。我在帖子的開頭指出了這個語言。 – djv