仅从字符串中提取最右边的n个字母

时间:2009-11-12 13:54:31

标签: c# string substring

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

Ex:我的字符串是“PER 343573”。现在我想只提取“343573”。

我该怎么做?

22 个答案:

答案 0 :(得分:142)

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

答案 1 :(得分:65)

编写扩展方法来表达Right(n);函数。该函数应该处理返回空字符串的空字符串或空字符串,短于返回原始字符串的最大长度的字符串和长度超过返回最右边字符的最大长度的最大长度的字符串。

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;
}

答案 2 :(得分:38)

使用扩展方法可能更好:

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);

答案 3 :(得分:25)

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
}

不应该出错,将空值作为空字符串返回,返回trimmed或base值。像“testx”.Left(4)或str.Right(12);

一样使用它

答案 4 :(得分:13)

MSDN

String mystr = "PER 343573";
String number = mystr.Substring(mystr.Length-6);
编辑:太慢......

答案 5 :(得分:8)

如果您不确定字符串的长度,但是您确定单词数量(在这种情况下总是2个单词,例如&x; xxx yyyyyy')您最好使用split 。

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

这总是会返回字符串的第二个单词。

答案 6 :(得分:6)

这不完全是你要求的,但只是看一下这个例子,看来你正在寻找字符串的数字部分。

如果总是这样,那么一个好方法就是使用正则表达式。

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

答案 7 :(得分:5)

使用此:

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

答案 8 :(得分:5)

根据您的要求进行猜测,但是以下正则表达式只会在字符串结尾之前产生6个字母数字,否则就不会匹配。

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

答案 9 :(得分:4)

由于您使用的是.NET,它全部编译为MSIL,只需引用Microsoft.VisualBasic使用Microsoft的内置Strings.Right method

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

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

作为进一步的信息,使用C#的Visual Basic方法已被记录elsewhere。我个人在尝试解析文件时首先偶然发现它,并发现this SO thread使用Microsoft.VisualBasic.FileIO.TextFieldParser类对解析.csv文件非常有用。

答案 10 :(得分:3)

使用此:

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

答案 11 :(得分:3)

var str = "PER 343573";
var right6 = string.IsNullOrWhiteSpace(str) ? string.Empty 
             : str.Length < 6 ? str 
             : str.Substring(str.Length - 6); // "343573"
// alternative
var alt_right6 = new string(str.Reverse().Take(6).Reverse().ToArray()); // "343573"

这支持str中的任意数量的字符。备用代码不支持null字符串。并且,第一个更快,第二个更紧凑。

如果知道包含短字符串的str,我更喜欢第二个。如果是长字符串,则第一个更适合。

例如

var str = "";
var right6 = string.IsNullOrWhiteSpace(str) ? string.Empty 
             : str.Length < 6 ? str 
             : str.Substring(str.Length - 6); // ""
// alternative
var alt_right6 = new string(str.Reverse().Take(6).Reverse().ToArray()); // ""

var str = "123";
var right6 = string.IsNullOrWhiteSpace(str) ? string.Empty 
             : str.Length < 6 ? str 
             : str.Substring(str.Length - 6); // "123"
// alternative
var alt_right6 = new string(str.Reverse().Take(6).Reverse().ToArray()); // "123"

答案 12 :(得分:3)

空安全方法:

字符串短于返回原始字符串的最大长度

字符串右扩展方法

func alreadyRegistertedUserContacts(_ contacts: Results<Contact>,
                                    allUsers: Results<User>) -> [Contact] {
    return contacts.filter { (contact) -> Bool in
        return contact.numbers.contains(where: { (number) -> Bool in
            return allUsers.contains(where: { (user) -> Bool in
                return user.phoneNumber == number
            })
        })
    }
}

字符串左扩展方法

public static string Right(this string input, int count) =>
    String.Join("", (input + "").ToCharArray().Reverse().Take(count).Reverse());

答案 13 :(得分:2)

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

private string TakeLast(string input, int num)
{
    if (num > input.Length)
    {
        num = input.Length;
    }
    return input.Substring(input.Length - num);
}

答案 14 :(得分:1)

可能未提及的另一种解决方案

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

答案 15 :(得分:1)

这是我使用的解决方案...... 它检查输入字符串的长度是否低于询问的长度。我在上面发布的解决方案不幸地考虑到了这一点 - 这可能会导致崩溃。

    /// <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);
        }
    }

答案 16 :(得分:1)

只是一个想法:

public static string Right(this string @this, int length) {
    return @this.Substring(Math.Max(@this.Length - length, 0));
}

答案 17 :(得分:0)

我使用Min来防止负面情况并处理空字符串

// <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;
    }

答案 18 :(得分:0)

using Microsoft.visualBasic;

 public class test{
  public void main(){
   string randomString = "Random Word";
   print (Strings.right(randomString,4));
  }
 }

输出是“Word”

答案 19 :(得分:0)

//s - your string
//n - maximum number of right characters to take at the end of string
(new Regex("^.*?(.{1,n})$")).Replace(s,"$1")

答案 20 :(得分:0)

不依靠位转换器和位移(需要确保编码) 这是我用作扩展方法'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);
}

答案 21 :(得分:0)

    $selectedConn = 'classes';
    
    $conn= new mysqli($selectedConn,$db[$selectedConn]['db_user'] ,$db[$selectedConn]['db_pass'],$db[$selectedConn]['db_name']);

    // OR store your connection in the array as well for future reference

    $db[$selectedConn]['conn'] = new mysqli($selectedConn,$db[$selectedConn]['db_user'] ,$db[$selectedConn]['db_pass'],$db[$selectedConn]['db_name']);