Получить строку из середины строки - PullRequest
5 голосов
/ 15 марта 2010

У меня есть закодированная строка, из которой я хотел бы получить значение. Я понимаю, что могу выполнить некоторые манипуляции со строками (IndexOf, LastIndexOf и т. Д.), Чтобы извлечь 12_35_55_219 из приведенной ниже строки, но мне было интересно, есть ли более чистый способ сделать это.

"AddedProject[12_35_55_219]0"

Ответы [ 5 ]

6 голосов
/ 15 марта 2010

Если вы можете быть уверены в формате строки, существует несколько возможностей:

Мой фаворит - создать очень простой токенизатор:

string[] arrParts = yourString.Split( "[]".ToCharArray() );

Поскольку строка имеет обычный формат, arrParts будет иметь три записи, и интересующая вас часть будет arrParts[1].

Если формат строки варьируется, вам придется использовать другие методы.

5 голосов
/ 15 марта 2010

Итак, в итоге, если у вас есть шаблон, который вы можете применить к вашей строке, проще всего использовать регулярные выражения, как в примере с Guffa.

С другой стороны, у вас все время есть разные токены, чтобы определить начало и конец вашей строки, тогда вы должны использовать комбинацию IndexOf и LastIndexOf и передать токены в качестве параметра, делая пример от Фредрика немного более общим :

string GetMiddleString(string input, string firsttoken, string lasttoken)
{
    int pos1 = input.IndexOf(firsttoken) + 1; 
    int pos2 = input.IndexOf(lasttoken); 
    string result = input.Substring(pos1 , pos2 - pos1);
    return result
}

И это при условии, что ваши токены встречаются в строке только один раз.

4 голосов
/ 15 марта 2010

Это зависит от того, насколько сильно может варьироваться строка. Например, вы можете использовать регулярное выражение:

string input = "AddedProject[12_35_55_219]0";
string part = Regex.Match(input, @"\[[\d_]+\]").Captures[0].Value;
1 голос
/ 15 марта 2010

Есть два метода, которые могут оказаться полезными, есть IndexOf и LastIndexOf с квадратными скобками в качестве параметров. После небольшого исследования вы сможете вытащить номер проекта.

0 голосов
/ 06 октября 2015

Вот улучшение от GetMiddleString Вагнера Сильвейры

string GetMiddleString(string input, string firsttoken, string lasttoken)
    {
        int pos1 = input.ToLower().IndexOf(firsttoken.ToLower()) + firsttoken.Length;
        int pos2 = input.ToLower().IndexOf(lasttoken.ToLower());            
        return input.Substring(pos1 , pos2 - pos1);
    }

А вот как вы это используете

string data = "AddedProject[12_35_55_219]0";
string[] split = data.Split("[]".ToCharArray());
rtbHelp.Text += GetMiddleString(data, split[0], split[2]).Trim("[]".ToCharArray());//print it to my C# winForm RichTextBox Help
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...