Получить часть строки, используя C# - PullRequest
1 голос
/ 15 января 2020

Мне нужно получить маленький кусочек строки, что-то вроде этого:

20T41

Всегда два числа, буква и цифры.

Но У меня много различные цепочки, подобные этим :

  • PN C 20T17
  • PN C 19T1391
  • PN C 19T1456
  • N C - 19T1099 разделенный
  • PN C 19T323 - без оп.
  • 19T1512 . Нерегулярный

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

str = str.Substring (0, str.LastIndexOf ('/') + 1);

Черной помечена строка, которую я хочу получить. Я думал сделать что-то, если, но это не эффективно. Что вы рекомендуете сделать это?

Ответы [ 3 ]

8 голосов
/ 15 января 2020

Вы можете попробовать сопоставление фрагмента с помощью регулярных выражений :

using System.Text.RegularExpressions;

...

str = Regex.Match(str, "[0-9]{2}T[0-9]+").Value;

или в случае любого (не необходимо T) может появиться заглавная буква:

str = Regex.Match(str, "[0-9]{2}[A-Z][0-9]+").Value;
1 голос
/ 15 января 2020

Следующее выражение Regex также поможет

var regex = new Regex("\\d{2}\\w\\d+");
var input = new List<string>()
    {"PNC 20T17", "PNC 19T1391", "P.N.C 19T1456,", "NC - 19T1099", "PNC 19T323", "19T1512."};

foreach (var item in input)
{
    var match = regex.Match(item);
    Console.WriteLine(match);
}

. Выдает следующий вывод

20T17
19T1391
19T1456
19T1099
19T323
19T1512

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

  • \d{2} десятичное число git, в два раза точно
  • \w любой символ слова, заглавная или не
  • \d+ десятичное число git один или несколько раз. Вы можете изменить его на \d{1,} или \d{2,}. Это означает соответствие di git как минимум один или два раза без верхних границ, что не указано в OP. Или используйте верхние границы, как \d{1,9}
0 голосов
/ 15 января 2020

Если приведенные вами примеры являются комбинациями, тогда LastIndexOf и Substring выполнят работу;

var yourInput = "P.N.C 19T1456";
var res = yourInput.Substring(yourInput.LastIndexOf(' ') + 1) ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...