1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
1

Найти позицию числа в строке

12.02.2013, 21:31. Показов 2049. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть ли какая хитрая возможность найти двузначные числа в строке, может regex какой хитрый или что-то подобное ?
Я конечно могу тупо двигаться по строке посимвольно и каждый раз пытаться парсить в ней числа, но это будет 100500 операций поиска числа с моей строноы ... тупо это как-то, хотелось бы покрасивше это задать, но не знаю как. Подскажите пожалуйста.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.02.2013, 21:31
Ответы с готовыми решениями:

Найти позицию подстроки в строке
привет всем, с вами снова изобретатель велосипедов :) на сей раз я решил изобрести поиск подстроки...

Найти позицию входжения подстроки в строке
у меня такая проблема: есть лог файл(примерно): name pos1 pos2 pos3 pos aa 0 1 2 ...

Найти позицию первого пробела в строке
что не так ? не понимаю ,почему при строке, например, " Press any key to continue..." пробел на 6...

Найти в строке позицию заданного символа
Помогите кто чем может нужно составить программку в паскале в ассемблере, Чтобы можно было найти в...

9
713 / 680 / 126
Регистрация: 30.03.2012
Сообщений: 1,124
12.02.2013, 21:47 2
C#
1
@"(?<=\D)\d\d(?=\D)"
не найдет соответствия в начале/конце строки
C#
1
@"\d\d"
попутает с трех- и более значными числами

придумать регекс который найдет и в начале и в конце строки и при этом не будет путать с трехзначными числами не смог
могу предложить воспользоваться первым и проверить три первых и три последних символа строки )
1
340 / 340 / 90
Регистрация: 04.03.2010
Сообщений: 648
13.02.2013, 00:46 3
не?
C#
1
var twoDigits = string.Join("", value.Select(x => char.IsDigit(x) ? x : ' ')).Split(new char[]{' '} , StringSplitOptions.RemoveEmptyEntries).Where(x => x.Length == 2);
2
773 / 553 / 80
Регистрация: 03.07.2011
Сообщений: 1,020
13.02.2013, 09:09 4
Хитрый регекс на самом деле оказался очень простым
C#
1
2
3
4
5
6
7
 string str = "35hhdfgnfn683gsgb89m8m5m5555m5m5ddd87ggg";
            Regex reg = new Regex(@"\d{2}");
 
            foreach (Match mn in reg.Matches(str))
            {
                MessageBox.Show(mn.Value);
            }
1
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
13.02.2013, 18:12  [ТС] 5
Vitall, о как хитро, спасибо. Я и не знал что у регекса можно получить коллекцю Match объектов.
0
713 / 680 / 126
Регистрация: 30.03.2012
Сообщений: 1,124
13.02.2013, 18:15 6
Цитата Сообщение от Vitall Посмотреть сообщение
Хитрый регекс на самом деле оказался очень простым
C#
1
2
3
4
5
6
7
 string str = "35hhdfgnfn683gsgb89m8m5m5555m5m5ddd87ggg";
            Regex reg = new Regex(@"\d{2}");
 
            foreach (Match mn in reg.Matches(str))
            {
                MessageBox.Show(mn.Value);
            }
очень простой регекс на самом деле оказался не совсем правильным
или по вашему 5555 это два двузначных числа?)
или из записи 683 действительно стоит взять 68 и назвать это двузачным числом?
з.ы. об этом минусе очень простого регекса я уже выше писал
0
298 / 256 / 57
Регистрация: 11.06.2012
Сообщений: 1,557
13.02.2013, 18:47 7
C#
1
2
3
4
5
6
7
8
9
            const string str = "35hhdfgnfn683gsgb89m8m5m5555m5m5ddd87ggg";
            var reg = new Regex(@"(^|\D)(\d\d)(\D)");
 
            foreach (Match mn in reg.Matches(str))
            {
                Console.WriteLine(mn.Result("$2"));
            } 
            Console.WriteLine("Good");
            Console.ReadLine();
Вот рабочий вариант с регулярками на тот случай если нужны именно двухзначные числа. Если в 683 должно найти и 68 и 83 тут уже даже хз можно ли что нибудь такое придумать.
0
773 / 553 / 80
Регистрация: 03.07.2011
Сообщений: 1,020
13.02.2013, 18:50 8
Цитата Сообщение от Tessen Посмотреть сообщение
или по вашему 5555 это два двузначных числа?)
или из записи 683 действительно стоит взять 68 и назвать это двузачным числом?

С утра я так и думал
можно так
C#
1
2
3
4
5
6
 string str = "35hhdfgnfn683gsgb89m8m5m5555m5m5ddd87ggg";
            Regex reg = new Regex(@"\D+");
            foreach (string mn in reg.Split(str))
            {
                if(mn.Length==2) MessageBox.Show(mn);   
            }
0
713 / 680 / 126
Регистрация: 30.03.2012
Сообщений: 1,124
13.02.2013, 19:00 9
Цитата Сообщение от Zuzik Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
            const string str = "35hhdfgnfn683gsgb89m8m5m5555m5m5ddd87ggg";
            var reg = new Regex(@"(^|\D)(\d\d)(\D)");
 
            foreach (Match mn in reg.Matches(str))
            {
                Console.WriteLine(mn.Result("$2"));
            } 
            Console.WriteLine("Good");
            Console.ReadLine();
Вот рабочий вариант с регулярками на тот случай если нужны именно двухзначные числа. Если в 683 должно найти и 68 и 83 тут уже даже хз можно ли что нибудь такое придумать.
и таки опять нет
добавьте в конец строки 12 - он не найдет
з.ы. угу, или split или просто \d+ и искать совпадения с длиной=2
0
298 / 256 / 57
Регистрация: 11.06.2012
Сообщений: 1,557
13.02.2013, 19:27 10
C#
1
(^|\D)(\d\d)($|\D)
в конце, в начале, в середине.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.02.2013, 19:27
Помогаю со студенческими работами здесь

Найти позицию подстроки в строке С++ (консоль)
Всем привет. Нужно найти в этой строке позицию подстроки &quot;&lt;Data&quot; (она встречается 2 раза). char...

Найти позицию последней запятой в строке
дана строка символов. Известно что в данной строке есть запятая. Найти позицию последней запятой

Найти позицию последнего символа двоеточия в строке
Найти позицию последнего символа двоеточия в строке. Выполнить двумя способами Буду рад любой...

Найти позицию а) первой и б) последней запятой в строке.
Дана строка символов.Найти такое натуральное i, что а) si – первая по порядку запятая; б) si –...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru