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