Разделение строкового значения c#

#c# #asp.net-mvc #asp.net-mvc-4

Вопрос:

Я хочу знать о том, как разделить значение в строковом формате на две части. Здесь, в моем приложении asp, я анализирую строковое значение из представления в контроллер.

А затем я хочу разделить все значение на две части.

Пример, например: В большинстве случаев значение, состоящее из двух букв, может быть текстовым значением (например, «PO», «SS», «GS»), а остальные остальные являются числами (SS235452).

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

Мой текущий код

 string approvalnumber = approvalCheck.ApprovalNumber.ToUpper();   

Спасибо.

Комментарии:

1. Пожалуйста, укажите ваши точные критерии — вы говорите «большую часть времени», но как насчет других случаев? Вы пытаетесь разделить буквы и цифры из строки, где «все буквы» будут первым элементом, а «все цифры» будут вторым? Если это так, регулярное выражение-один из способов сделать это…

2. @Charleh Я имею в виду, что формат ввода TextTextNumNumNumNum такой же, как и у wise. первые две буквы-это текст, а остальные-цифры. Но статической длины нет. Первые две буквы-это текст, а остальные — цифры

3. вы пробовали номер утверждения. Подстрока(2);

Ответ №1:

Как вы уже упоминали, в первой части будет 2 буквы, и меняется только вторая часть, вы можете использовать метод подстроки строки, как показано ниже.

 var textPart = input.Substring(0,2);  var numPart = input.Substring(2);  

Первая строка извлекает 2 символа из начального нулевого индекса, а вторая инструкция извлекает все символы из индекса 2. При необходимости вы можете привести вторую часть к числу.

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

Комментарии:

1. Привет. Это такой простой код, и спасибо

Ответ №2:

Вы можете попробовать использовать регулярное выражение для извлечения альфа-чисел из строки.

Эта функция javascript возвращает только числа из входной строки.

 function getNumbers(input) {  return input.match(/[0-9] /g); }  

Комментарии:

1. Но в данном конкретном случае (известно, что существует ровно две буквы) подстрока проще

2. @amitpatole Спасибо за решение. Я попробую и это

Ответ №3:

Я бы использовал регулярное выражение. Учитывая тот факт, что вы указываете ASP-NET-4, я предполагаю, что вы не можете использовать кортежи и out var т. Д., Поэтому все будет выглядеть следующим образом:

 using System.Text.RegularExpressions; using FluentAssertions; using Xunit;  namespace Playground {  public class Playground  {  public struct ProjectCodeMatch  {  public string Code { get; set; }   public int? Number { get; set; }  }   [Theory]  [InlineData("ABCDEFG123", "ABCDEFG", 123)]  [InlineData("123456", "", 123456)]  [InlineData("ABCDEFG", "ABCDEFG", null)]  [InlineData("ab123", "AB", 123)]  public void Split_Works(string input, string expectedCode, int? expectedNumber)  {  ProjectCodeMatch result;  var didParse = TryParse(input, out result);   didParse.Should().BeTrue();  result.Code.Should().Be(expectedCode);  result.Number.Should().Be(expectedNumber);  }   private static bool TryParse(string input, out ProjectCodeMatch result)  {  /*  * A word on this RegExp:  * ^ - the match must happen at the beginning of the string (nothing before that)  * (?lt;Codegt;[a-zA-Z] ) - grab any number of letters and name this part the "Code" group  * (?lt;Numbergt;d ) - grab any number of numbers and name this part the Number group  * {0,1} this group must occur at most 1 time  * $ - the match must end at the end of the string (nothing after that)  */  var regex = new Regex(@"^(?lt;Codegt;[a-zA-Z] ){0,1}(?lt;Numbergt;d ){0,1}$");   var match = regex.Match(input);   if (!match.Success)  {  result = default;  return false;  }   int number;  var isNumber = int.TryParse(match.Groups["Number"].Value, out number);   result = new ProjectCodeMatch  {  Code = match.Groups["Code"].Value.ToUpper(),  Number = isNumber ? number : null  };  return true;  }  } }  

Ответ №4:

Ответ на linq:

 string d = "PO1232131"; string.Join("",d.TakeWhile(a =gt; Char.IsLetter(a)))