2013-01-31 41 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