只从string中提取最右边的n个字母

如何提取由另一个string中最右边的六个字母组成的子string?

例如:我的string是“PER 343573”。 现在我只想提取“343573”。

我怎样才能做到这一点?

 string SubString = MyString.Substring(MyString.Length-6); 

写一个扩展方法来表示Right(n); function。 该函数应该处理返回空string的空或空string,比返回原始string的最大长度短的string,以及比最大长度长的string,返回最右边字符的最大长度。

 public static string Right(this string sValue, int iMaxLength) { //Check if the value is valid if (string.IsNullOrEmpty(sValue)) { //Set valid empty string as string could be null sValue = string.Empty; } else if (sValue.Length > iMaxLength) { //Make the string no longer than the max length sValue = sValue.Substring(sValue.Length - iMaxLength, iMaxLength); } //Return the string return sValue; } 

可能更好使用扩展方法:

 public static class StringExtensions { public static string Right(this string str, int length) { return str.Substring(str.Length - length, length); } } 

用法

 string myStr = "ABCDEPER 343573"; string subStr = myStr.Right(6); 
 using System; public static class DataTypeExtensions { #region Methods public static string Left(this string str, int length) { str = (str ?? string.Empty); return str.Substring(0, Math.Min(length, str.Length)); } public static string Right(this string str, int length) { str = (str ?? string.Empty); return (str.Length >= length) ? str.Substring(str.Length - length, length) : str; } #endregion } 

不应该错误,将空值返回为空string,返回修剪或基本值。 使用它像“testx”.Left(4)或str.Right(12);

MSDN

 String mystr = "PER 343573"; String number = mystr.Substring(mystr.Length-6); 

编辑:太慢…

这不完全是你所要求的,但看看这个例子,看来你正在寻找string的数字部分。

如果情况总是如此,那么一个好的方法就是使用正则expression式。

 var regex= new Regex("\n+"); string numberString = regex.Match(page).Value; 

如果你不确定string的长度,但是你确定字数(在这个例子中总是2个字,比如'xxx yyyyyy'),你最好使用split。

 string Result = "PER 343573".Split(" ")[1]; 

这总是返回你的string的第二个字。

用这个:

 String text = "PER 343573"; String numbers = text; if (text.Length > 6) { numbers = text.Substring(text.Length - 6); } 

按照您的要求猜测,但是下面的正则expression式只会在string结束之前产生6个字母数字,否则就不会匹配。

 string result = Regex.Match("PER 343573", @"[a-zA-Z\d]{6}$").Value; 

用这个:

string mystr = "PER 343573"; int number = Convert.ToInt32(mystr.Replace("PER ",""));

这是我使用的解决scheme…它检查inputstring的长度不低于要求的长度。 我在上面看到的解决scheme并不考虑这个问题 – 这可能会导致崩溃。

  /// <summary> /// Gets the last x-<paramref name="amount"/> of characters from the given string. /// If the given string's length is smaller than the requested <see cref="amount"/> the full string is returned. /// If the given <paramref name="amount"/> is negative, an empty string will be returned. /// </summary> /// <param name="string">The string from which to extract the last x-<paramref name="amount"/> of characters.</param> /// <param name="amount">The amount of characters to return.</param> /// <returns>The last x-<paramref name="amount"/> of characters from the given string.</returns> public static string GetLast(this string @string, int amount) { if (@string == null) { return @string; } if (amount < 0) { return String.Empty; } if (amount >= @string.Length) { return @string; } else { return @string.Substring(@string.Length - amount); } } 

由于您使用.NET编译为MSIL ,只需引用Microsoft.VisualBasic ,并使用Microsoft内置的Strings.Right方法

 using Microsoft.VisualBasic; ... string input = "PER 343573"; string output = Strings.Right(input, 6); 

无需创build自定义扩展方法或其他工作。 结果是通过一个参考和一个简单的代码行来实现的。

有关这方面的进一步信息,使用C#的Visual Basic方法已在其他地方logging 。 我个人试图parsing一个文件时,第一次遇到了这个问题 ,并发现这个SO线程使用Microsoft.VisualBasic.FileIO.TextFieldParser类对parsing.csv文件非常有用。

我使用Min来防止负面情况,并处理空string

 // <summary> /// Returns a string containing a specified number of characters from the right side of a string. /// </summary> public static string Right(this string value, int length) { string result = value; if (value != null) result = value.Substring(0, Math.Min(value.Length, length)); return result; } 

这是我使用的方法:我喜欢保持简单。

 private string TakeLast(string input, int num) { if (num > input.Length) { num = input.Length; } return input.Substring(input.Length - num); } 
 using Microsoft.visualBasic; public class test{ public void main(){ string randomString = "Random Word"; print (Strings.right(randomString,4)); } } 

输出是“Word”

另一个解决scheme可能没有提到

 S.Substring(S.Length < 6 ? 0 : S.Length - 6) 

不使用位转换器和位移(需要确定编码),这是我用作“Right”扩展方法的最快方法。

 string myString = "123456789123456789"; if (myString > 6) { char[] cString = myString.ToCharArray(); Array.Reverse(myString); Array.Resize(ref myString, 6); Array.Reverse(myString); string val = new string(myString); }