Извлечь только правильные большинство n букв из строки - PullRequest
98 голосов
/ 12 ноября 2009

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

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

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

Ответы [ 21 ]

142 голосов
/ 12 ноября 2009
string SubString = MyString.Substring(MyString.Length-6);
65 голосов
/ 12 ноября 2009

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

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

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);
25 голосов
/ 08 июля 2014
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
}

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

13 голосов
/ 12 ноября 2009

* MSDN 1002 *

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

РЕДАКТИРОВАТЬ: слишком медленно ...

8 голосов
/ 03 июля 2013

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

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

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

6 голосов
/ 12 ноября 2009

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

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

var regex= new Regex("\n+");
string numberString = regex.Match(page).Value;
5 голосов
/ 12 ноября 2009

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

String text = "PER 343573";
String numbers = text;
if (text.Length > 6)
{
    numbers = text.Substring(text.Length - 6);
}
5 голосов
/ 12 ноября 2009

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

string result = Regex.Match("PER 343573", @"[a-zA-Z\d]{6}$").Value;
4 голосов
/ 27 июня 2016

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...