Извлеките только правое большинство n букв из строки

Как я могу извлечь substring, который состоит из шести самых правых букв из другого string?

Пример: моя строка - "PER 343573". Теперь я хочу извлечь только "343573".

Как я могу это сделать?

Ответ 1

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

Ответ 2

Напишите метод расширения для выражения функции 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;
}

Ответ 3

Вероятно, лучше использовать метод расширения:

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

Ответ 4

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
}

Не следует использовать ошибку, возвращает nulls как пустую строку, возвращает обрезанные или базовые значения. Используйте его как "testx".Left(4) или str.Right(12);

Ответ 5

MSDN

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

ИЗМЕНИТЬ: слишком медленно...

Ответ 6

если вы не уверены в длине своей строки, но вы уверены в количестве слов (всегда в этом случае 2 слова, например "xxx yyyyyy" ), вам лучше использовать split.

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

это всегда возвращает второе слово вашей строки.

Ответ 7

Это не совсем то, о чем вы просите, но просто глядя на пример, кажется, что вы ищете числовой раздел строки.

Если это всегда так, тогда хороший способ сделать это будет использовать регулярное выражение.

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

Ответ 8

Используйте это:

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

Ответ 9

Угадывая ваши требования, но следующее регулярное выражение даст только 6 буквенно-цифровых символов до конца строки и не будет соответствовать иначе.

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

Ответ 10

Поскольку вы используете .NET, который все компилируется в MSIL, просто укажите Microsoft.VisualBasic и используйте встроенный метод Microsoft Strings.Right:

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

Не нужно создавать собственный метод расширения или другую работу. Результат достигается с помощью одной ссылки и одной простой строки кода.

Как дополнительная информация об этом, использование методов Visual Basic с С# было задокументировано в другом месте. Я лично наткнулся на него первым, когда пытался проанализировать файл, и обнаружил, что этот поток SO при использовании класса Microsoft.VisualBasic.FileIO.TextFieldParser чрезвычайно полезен для анализа файлов .csv.

Ответ 11

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

Используйте это:

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

Ответ 13

Другое решение, которое не может быть упомянуто

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

Ответ 14

Нулевые безопасные методы:

Строки короче максимальной длины, возвращающие исходную строку

Метод расширения правой строки

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

Метод расширения левой строки

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

Ответ 15

Это метод, который я использую: мне нравится держать вещи простыми.

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

Ответ 16

Вот решение, которое я использую... Он проверяет, что длина входной строки не меньше заданной длины. Решения, которые я вижу выше, не учитывают это, к сожалению, что может привести к сбоям.

    /// <summary>
    /// Gets the last x-<paramref name="amount"/> of characters from the given string.
    /// If the given string 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);
        }
    }

Ответ 17

Просто мысль:

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

Ответ 18

Не прибегая к битовому преобразователю и смещению битов (нужно обязательно кодировать) это самый быстрый метод, который я использую как метод расширения "Право".

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

Ответ 19

Я использую 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;
    }

Ответ 20

using Microsoft.visualBasic;

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

вывод - "Word"

Ответ 21

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