在C#中简单获取字符串(忽略末尾的数字)

时间:2009-09-27 19:02:52

标签: c# text-parsing

我认为正则表达式有点过头也需要一些时间来编写一些代码(我想我现在应该知道我知道一些正则表达式。)

用字母数字字符串分隔字符串的最简单方法是什么? 它永远是LLLLDDDDD。我只想要字母(l's),通常只有1或2个字母。

4 个答案:

答案 0 :(得分:11)

TrimEnd

string result = input.TrimEnd(new char[]{'0','1','2','3','4','5','6','7','8','9'});
// I'm sure using LINQ and Range can simplify that.
// also note that a string like "abc123def456" would result in "abc123def"

但RegEx也很简单:

string result = Regex.Match(input,@"^[^\d]+").Value;

答案 1 :(得分:10)

我更喜欢Michael Stum的正则表达式答案,但这也是LINQ方法:

string input = "ABCD1234";
string result = new string(input.TakeWhile(c => Char.IsLetter(c)).ToArray());

答案 2 :(得分:3)

您可以使用与数字匹配的正则表达式将其删除:

input = Regex.Replace(input, "\d+$", String.Empty);

旧式循环也不错,它实际上应该是最快的解决方案:

int len = input.Length;
while (input[len-1] >= '0' && input[len-1] <= '9') len--;
input = input.Substring(0, len);

答案 3 :(得分:0)

他们已经得到了 - 注意好的解决方案使用not运算符来使用你的问题描述:“不是数字”如果你在前面有数字似乎是我有限的收益,你必须有所谓的捕获组过去在字符串前端的任何东西。我现在使用的设计范例不是分隔符,后跟分隔符,后跟一个左括号。

这导致需要一个不在结果集中的分隔符,这对于一件事可以很好地建立ascii值为data-delimitersl,例如0x0019 / 0x0018等等。