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