Как удалить строки и получить только целые числа?
У меня есть строка (01 - ABCDEFG)
Мне нужно получить (01) только
Как удалить строки и получить только целые числа?
У меня есть строка (01 - ABCDEFG)
Мне нужно получить (01) только
input = Regex.Replace(input, "[^0-9]+", string.Empty);
Существует четыре разных способа сделать это (возможно, больше, но я выбрал их).
# 1: Regex из Bala R
string output = Regex.Replace(input, "[^0-9]+", string.Empty);
# 2: Regex from Donut и агент-j
string output = Regex.Match(input, @"\d+").Value;
# 3: Linq
string output = new string(input.ToCharArray().Where(c => char.IsDigit(c)).ToArray());
# 4: Подстрока, для этого для работы черточка должна находиться в строке между цифрами и текстом.
string output = input.Substring(0, input.IndexOf("-")).Replace(" ", "");
С этими входами:
string input1 = "01 - ABCDEFG";
string input2 = "01 - ABCDEFG123";
Для 1 и 2 результаты будут следующими:
output1 = "01";
output2 = "01123";
Для 3 и 4 результаты будут следующими:
output1 = "01";
output2 = "01";
Если ожидаемый результат состоит в том, чтобы получить все цифры в строке, используйте # 1 или # 2, но если ожидаемый результат должен только получить цифры перед тире, используйте # 3 или # 4.
С строкой, такой же короткой, как и # 1 и # 2, примерно одинаковы по скорости, а также для # 3 и # 4, но если есть много итераций или строки в четыре раза больше или больше # 2 быстрее, чем # 1 и # 4 быстрее, чем # 3.
Примечание. Если круглые скобки включены в строки №4, необходимо изменить это, но это не сделает это намного медленнее:
string output = input.Substring(0, input.IndexOf("-")).Replace(" ", "").Replace("(", "");
попробуйте следующее:
Convert.ToInt32(string.Join(null, System.Text.RegularExpressions.Regex.Split(s, "[^\\d]")))
возвращает целочисленное значение 1.
string snum = System.Text.RegularExpression.Regex.Match(s, "\d+").Value;
int num;
if (!int.TryParse(snum, out num))
throw new Exception();
Вы должны использовать регулярные выражения - они довольно эффективный способ сопоставить строки текста с определенными шаблонами, и это отличный сценарий для их использования.
Образец "\d+
" будет соответствовать последовательности из 1 или более цифр. Простой метод, который использует этот шаблон для извлечения чисел all из строки, выглядит следующим образом:
public static List<int> ExtractInts(string input)
{
return Regex.Matches(input, @"\d+")
.Cast<Match>()
.Select(x => Convert.ToInt32(x.Value))
.ToList();
}
Итак, вы можете использовать его следующим образом:
List<int> result = ExtractInts("( 01 - ABCDEFG )");
Более подробную информацию о регулярных выражениях см. в этой странице (MSDN) или эту страницу (полезный "обманщик" ).
Посмотрите это сообщение в блоге: http://weblogs.asp.net/sushilasb/archive/2006/08/03/How-to-extract-numbers-from-string.aspx
Простая программа, которая извлекает номер из строки с использованием регулярного выражения.
class Program
{
static void Main(string[] args)
{
Console.WriteLine(ExtractNumbers("( 01 - ABCDEFG )")); // 01
Console.ReadLine();
}
static string ExtractNumbers(string expr)
{
return string.Join(null, System.Text.RegularExpressions.Regex.Split(expr, "[^\\d]"));
}
}
Надеюсь, это поможет!
Получить все числа из строки
string str = "01567438absdg34590";
string result = "";
result = Regex.Replace(str, @"[^\d]", "");
Console.WriteLine(result);
Console.Read();
Выход: 0156743834590
Response.Write(Convert.ToDecimal(string.Join(null, System.Text.RegularExpressions.Regex.Split(TextBox1.Text, "[^\\d .]"))));
Это для чисел int
и decimal
.
Попробуйте следующее:
string XYZ = string.Join(null, System.Text.RegularExpressions.Regex.Split("XYZ 77", "[^\d]"));
Вы также можете использовать этот способ, чтобы получить соответствующий ответ.
string sentence = "10 cats, 20 dogs, 40 fish and 1 programmer";
string[] digits= Regex.Split(sentence, @"\D+");
foreach (string value in digits)
{
int number;
if (int.TryParse(value, out number))
{
Debug.Log(value);
}
}