Как получить значения a и b из текста, подобного axb?

#c# #string

#c# #строка

Вопрос:

Я столкнулся с проблемой, связанной с тем, как получить конкретное строковое значение из текста. Например: для данного string

 "400X500 abc"
  

Как я могу получить некоторые string из этого текста, например:

 string width = "400"
string height = "500"
  

Большое спасибо за вашу помощь.

С наилучшими пожеланиями,

Черри Труонг

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

1. Вам нужно предоставить более подробную информацию, какой-нибудь пример кода, показывающий, что вы пытаетесь сделать, потому что это непонятно.

2. Что находится abc в 400X500 abc ?

3. строка все время находится в одном и том же формате?

4. Вероятно, он хочет разделить строку на «X» в качестве разделителя. Не следует ли закрыть этот вопрос, поскольку поиск не требует усилий?

5. abc означает случайный текст или некоторое описание для конкретного типа конструкционной балки в моем случае. Например: «400x500mm» . Итак, я хочу получить конкретную строку значения ширины и высоты конструкционной балки из ее метки.

Ответ №1:

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

  using System.Text.RegularExpressions;

 ...

 string source = "400X500 abc";

 string[] numbers = Regex
   .Matches(source, "[0-9] ") 
   .OfType<Match>()
   .Select(match => match.Value)
   .ToArray(); 

 string width = numbers.ElementAtOrDefault(0) ?? "";
 string height = numbers.ElementAtOrDefault(1) ?? "";
  

Или (если вы хотите быть уверены, что X разделитель присутствует)

   Match match = Regex
    .Match(source, @"([0-9] )s*Xs*([0-9] )", RegexOptions.IgnoreCase);

  string width = match.Success ? match.Groups[1].Value : "";
  string height = match.Success ? match.Groups[2].Value : "";
  

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

1. Большое спасибо за предоставленный код. Для меня это сработало прекрасно.

Ответ №2:

Вы можете попробовать что-то вроде этого:

 string data = "400X500 abc";
string[] splitData = data.TrimEnd('a', 'b', 'c').Trim().Split('X');
string width = splitData[0] ?? string.Empty;
string height = splitData[1] ?? string.Empty;
  

Ответ №3:

Если вы можете предположить, что это всегда будет в этом формате, вы можете сделать что-то вроде этого:

 string raw = "400X500";
string width = raw.Substring(0, raw.IndexOf("X"));
string height = raw.Substring(raw.IndexOf("X")   1);
  

Теперь width="400" и height=500 .

Ответ №4:

Предполагая, что текст всегда будет в формате «100X200 aabdsafgds», тогда рабочее решение будет выглядеть примерно так:

 var value = "100X200 aabdsafgds";
var splitValues = value.Split(new[] { 'X', ' ' }, StringSplitOptions.RemoveEmptyEntries);
var value1 = splitValues[0];
var value2 = splitValues[1];
  

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

1. Нет, в этом случае вам нужно было бы использовать регулярное выражение, как показал Дмитрий.

Ответ №5:

Я предполагаю, что входная строка всегда находится в одном и том же формате.

«heightXwidth abc»

 var value = "400X500 abc";

var vals = value.Trim().Split('X');

var height = new string(vals[0] == null ? "0".ToArray() : vals[0].Where(char.IsDigit).ToArray());
var width = new string(vals[1] == null ? "0".ToArray() : vals[1].Where(char.IsDigit).ToArray());
  

Я уверен, что вы могли бы скорректировать по мере необходимости.

Редактировать:

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

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

1. да, но в исходном случае говорится, что строка отформатирована как «400×500 abc», что приводит к не столь отличающемуся конечному результату var height = value . Разделить(‘ ‘)[0].Разделить(‘x’)[0]; переменная ширина = значение. Разделить(‘ ‘)[0].Разделить(‘x’)[1];

2. В этом случае vala[1] также содержался бы постфикс abc .